2012-10-15 80 views
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:帆布與它的掩模上的Sprite相加,掩模具有相同大小作爲父子畫面,canvas.xcanvas.y是負的。

+0

Sprite相對於註冊點的視覺左上角在哪裏? –

+0

@ AmyBlankenship,不知道我理解你的問題。 'canvas.x'和'canvas.y'都是負數。 – Eugeny89

+1

我認爲你在推翻它。試試像canvas.x = w/2 -canvas.width/2。您可能需要在開始處記錄偏移量,因爲canvas.x,y不在掩碼0,0處,並按比例縮放並添加/減去它。 –

回答

0

我之前做過類似的事情的方式是將畫布精靈放在另一個精靈例如。在屏幕中心(或任何需要的地方)具有其註冊點的縮放。然後,您可以在縮放精靈內部移動畫布(在我的情況下它可以拖動)並縮放外部精靈,以便中心放大。 縮放和定位不同的精靈我發現比做偏移更容易。