我創建了一個mc,它用作我的地圖和控件,以便使地圖可以四處移動,並將關鍵點導航到並放大在不同的縮放級別。Flash AS3 - 如何在縮放後的某個點周圍圍繞對象
我使用scaleX和scaleY來縮放地圖mc和x和y位置列表,以正確定位每個關鍵點的地圖。
當我想去的特定區域我執行此計算(OFFSETX和OFFSETY在屏幕的中心):
newX = posX * scale + offsetX;
newY = posY * scale + offsetY;
然後我吐溫順利縮放地圖的位置和規模和將地圖移動到正確的位置:
var tween = new TweenLite(_background, EASING_SPEED, {x:newX, y:newY,scaleX:scale.getScale(),scaleY:scale,ease:EASING_TYPE,onComplete:moveToComplete,onCompleteParams:[room]});
我現在需要實現放大/縮小功能,這就是我與掙扎。變焦應使用屏幕作爲REG點規模的中心,所以我一直在想沿着以下線的東西,以獲得正確的定位:
var newX = offsetX - (offsetX - _background.x) * scale;
var newY = offsetY - (offsetY - _background.y) * scale;
所以在我的腦海裏這得到距離地圖當前位置相對於屏幕中心點的距離(offsetX,offsetY),然後按照新比例縮放該距離。
但是,這顯然是錯誤的,因爲它不工作,地圖的定位是錯誤的。
我也嘗試過使用變換矩陣來得到正確的值,但我對它們的瞭解甚少,沒有得到正確的結果。
function scale(target:MovieClip, center:Point, scale:Number):Point {
var m:Matrix = new Matrix();
m.translate(-center.x, -center.y);//move the center into (0,0)
m.scale(scale, scale);//scale relatively to (0,0) (which is where our center is now)
m.translate(center.x, center.y);//move the center back to its original position
return m.transformPoint(new Point());//transform (0,0) using the whole transformation matrix to calculate the destination of the upper left corner
}
如果有人可以指出我要出錯的地方,我會非常感激!
感謝您的迴應The_asMan,如果我錯了,請糾正我的錯誤,但這種解決方案只能讓我放大和縮小圖像的中心,而不是屏幕中心的圖像中的點? –
確定它可以根據你的偏移量 –
好好調整。我很努力地看到如何在計算中實現這一點,請您詳細說明第一點問題嗎? –