0

スケーリングされているスプライト (キャンバス) があります。キャンバスにはマスクがあります。問題は、単純なスケーリング ( scaleX=newScale; scaleY=newScale;) が、マスクを超えてマスクの下のキャンバスの一部を占めることです。したがって、マスクの下のキャンバスのポイントが同じ場所に留まるように、スケーリング後にキャンバスを移動する必要があります。私は次のようなことをしようとしています:

var deltaScale = newScale / scale;
//w and h are width and height of mask
canvas.scaleX = newScale;
canvas.scaleY = newScale;
canvas.x += (canvas.x + w/2) - (canvas.x + w/2) / deltaScale;
canvas.y += (canvas.y + h/2) - (canvas.y + h/2) / deltaScale;

その後も中心点は同じ場所に留まりません。スケーリング後にキャンバスを移動する方法を誰かに教えてもらえますか?

PS:キャンバスの幅と高さが非常に大きい (25000 程度) 場合は、それが役に立ちます。

UPD:マスクを含むキャンバスがスプライトに追加され、マスクはその親スプライトと同じサイズにcanvas.xなりcanvas.y、負になります。

4

1 に答える 1

0

以前に似たようなことをした方法は、キャンバススプライトを別のスプライトの中に入れることでした. 画面の中央(または必要な場所)に基準点があるズーム。次に、ズーム スプライト内でキャンバスを移動し (私の場合はドラッグ可能でした)、外側のスプライトをスケーリングして、中心が拡大されるようにします。さまざまなスプライトのスケーリングと配置は、オフセットを行うよりもはるかに簡単であることがわかりました。

于 2012-10-15T20:16:48.983 に答える