2016-07-12 20 views
1

私はsetTransformを使って私の背景パターン画像を拡大しています。スケールは1から開始し、スケールが0.01になるたびに0.5に達するまで開始します。アップデートでHTML5キャンバスでスムーズにパターンイメージを拡大/縮小する方法は?

context.setTransform(scale, 0, 0, scale, position.x, position.y); 

:だからここ

は、スケーリングコードで上記のコードを使用し

scale -= 0.01; 

Iは、地紋画像は、スケーリングされたパターン画像に置き換えられた変更をアニメーション化するとき正しくしかし、移行はそれほど滑らかではありません。短時間で他の画像に突然現れた画像が目立ちますが、目立つように動作します。交換をよりスムーズかつ目立たないようにしたいが、その効果をどのように達成するかはわからない。

+0

問題のリンクデモを教えてもらえますか? – Gruber

答えて

0

あなたが代わり要するにsetTransform()

ctx.translate(pt.x,pt.y); 
ctx.scale(factor,factor); 
ctx.translate(-pt.x,-pt.y); 

translate()を使用することができ、あなたのオフセットにより、キャンバスコンテキストをtranslate()したい、 scale()それは バックまたはズームアウトして、translate()しますマウスのオフセットの反対側。 カーソル位置をスクリーンスペースから変換されたキャンバスコンテキストに変換する必要があることに注意してください。

詳細情報とライブサンプルについては、thisを参照してください。使用することができ

+0

'translate'と' setTransform'の違いは何ですか?翻訳を使用する場合、コンテキストを保存して復元する必要はありませんか? – newguy

+0

@newguyコンテキストを保存して復元する必要はありません。画面のスペースから変換されたキャンバスのコンテキストにカーソルの位置を変換し、その後にすべてのキャンバスのコンテキストを再描画する必要があります。例でどのように円滑に動作するかを確認してください。http://phrogz.net/tmp/canvas_zoom_to_cursor.html この例のコードをチェックしてみてください。それは本当に簡単です。 – semanser

+0

私は 'translate 'を使ってみましたが、同じ効果がありました。私は突然の動きに気づくことができます。多分私は正しい位置を入れていないでしょうか? – newguy

0

のsetTransform

最初の2つの数字は、x軸の方向と長さ(スケール)であり、次の二つがy軸の方向と長さであり、最後の二つの場所であります起源

あなたに復元する必要がある場合は、軸方向その後

var scale = ? 
var originX = ? 
var originY = ? 
var rotation = ? 
// get the x axis direction and length 
var xdx = Math.cos(rotation) * scale; 
var xdy = Math.sin(rotation) * scale; 
// if you are not skewing then the y axis is at 90deg so x is neg y and y is x 
ctx.setTransform(xdx,xdy,-xdy,xdx,originX,originY); 

を計算してのsetTransformで回転を設定することができます

var scale = ? 
var originX = ? 
var originY = ? 
var rotation = ? 
ctx.setTransform(scale,0,0,scale,originX,originY); 
ctx.rotate(rotation); 

や翻訳、スケール、および回転を設定する最も簡単な方法デフォルトの変換

ctx.setTransform(1,0,0,1,0,0); // restore default transform 

setTransformのすべての値は、π xelsとset transformは、レンダラーがピクセルを作成する場所と形状を基本的に記述します。0,

パンとズームを平滑化します。

この答えは、マウスを使用してマウスを使用してsetTransform(保存の復元を使用する必要はありません)で画像を拡大/縮小する実例を示しています。さらに、ズームとパンをスムーズにする方法を示します。Pan and Zoom

関連する問題