我有一個大的大雪碧,我想放大和縮小鼠標的位置作爲支點,確切地說google地圖或photoshop縮放如何工作,當你旋轉鼠標輪。基於鼠標位置縮放對象
爲了展現scaleX和scaleY屬性的縮放效果,但固定點是(0,0),而我需要是鼠標位置(當然每次都會改變)。
我該如何改變這種情況?
謝謝。
我有一個大的大雪碧,我想放大和縮小鼠標的位置作爲支點,確切地說google地圖或photoshop縮放如何工作,當你旋轉鼠標輪。基於鼠標位置縮放對象
爲了展現scaleX和scaleY屬性的縮放效果,但固定點是(0,0),而我需要是鼠標位置(當然每次都會改變)。
我該如何改變這種情況?
謝謝。
通過谷歌搜索正確的話找到了... 此鏈接說明了仿射變換http://gasi.ch/blog/zooming-in-flash-flex/ ,所以我可以補間的轉換矩陣:
var affineTransform:Matrix = board.transform.matrix;
affineTransform.translate(-mouseX, -mouseY);
affineTransform.scale(0.8, 0.8);
affineTransform.translate(mouseX, mouseY);
var originalMatrix:Matrix = board.transform.matrix;
TweenLite.to(originalMatrix, 0.7, {a:affineTransform.a, b:affineTransform.b, c:affineTransform.c, d:affineTransform.d, tx:affineTransform.tx, ty:affineTransform.ty, onUpdate:applyMatrix, onUpdateParams:[originalMatrix]});
:-)
我剛剛做了一個Google search「關於任意點的縮放」(減去引號),第一個結果看起來很有希望。
您必須將原始偏移量從秤中取出,然後在新秤上重新應用它。我自己做了這件事,但是現在沒有代碼可以交給我,所以我會看看我是否可以將它挖出來並在以後發佈。
這樣做的僞代碼是這樣的(從內存中):未聲明
float dir = UP ? 1 : -1;
float oldXscale = Xscale;
float oldYscale = Yscale;
Xscale += dir * increment;
Yscale += dir * increment;
newX = (oldX - Xoffset)/Xscale;
newY = (oldY - Yoffset)/Yscale;
Xoffset += (newX * oldXscale) - (newX * Xscale);
Yoffset += (newY * oldYscale) - (newY * Yscale);
什麼是「全球性」
private static function onMouseWheel(event:MouseEvent):void {
var zoomAmount:Number = 0.03;
if (event.delta < 0)
zoomAmount *= -1;
var x:int = largeLargeSprite.mouseX;
var y:int = largeLargeSprite.mouseY;
largeLargeSprite.scaleX += zoomAmount;
largeLargeSprite.scaleY += zoomAmount;
largeLargeSprite.x -= x * zoomAmount;
largeLargeSprite.y -= y * zoomAmount;
}
啊,但是因爲我補間,我不能只是「移動」精靈當補結束.. 我可以吐溫x和y也,但是過渡4處房產一個複雜的對象開始在我看來太多(但也許我錯了..我必須嘗試) – Carlo 2009-05-31 17:02:45
那麼這是你會做什麼的基礎,如果你手動補間,所以你可以設置結束從這個補間? – ChrisF 2009-05-31 17:08:53
通過手動補間手動輸入框或事件回調本身。 val + =(cur - target)/ delta – FlavorScape 2013-11-07 00:40:49