2014-07-01 80 views
1

使用我在網上找到的一些代碼幫助我爲我正在嘗試的程序創建縮放功能。它是製作一個允許用戶標記點的地圖。目前代碼只能在地圖圖像上縮放,但我不能讓點圖標重新對齊到原來的位置。我無法鍛鍊它的數學。縮放點以匹配背景。 Actionscript 3

代碼,以放大和縮小

if (mev.shiftKey) { 
    image.scaleX = Math.max(scaleFactor*image.scaleX, minScale); 
    image.scaleY = Math.max(scaleFactor*image.scaleY, minScale); 
} 

if (mev.ctrlKey) { 
    image.scaleX = Math.min(1/scaleFactor*image.scaleX, maxScale); 
    image.scaleY = Math.min(1/scaleFactor*image.scaleY, maxScale); 
    mat = image.transform.matrix.clone(); 
    MatrixTransformer.matchInternalPointWithExternal(mat,internalCenter,externalCenter); 
    image.transform.matrix=mat; 

這使得圖像與下列因素有關

public var scaleFactor:Number = 0.8; 
    public var minScale:Number = 0.25; 
    public var maxScale:Number = 2.0; 

,當我嘗試移動覆蓋在指針的圖標,會出現問題擴大這個圖片。目前他們不會增長或縮小,但他們無法獲得數學,讓他們將正確數量的像素從鼠標位置移開,以便它們仍然保持一致。目前我使用下面的公式

//decrease zoom 
stage.getChildAt(i).x = stage.getChildAt(i).x * scaleFactor; 

//increase zoom 
stage.getChildAt(i2).x = stage.getChildAt(i2).x/scaleFactor; 

有什麼想法?我正在使用的代碼來自於 http://www.flashandmath.com/howtos/zoom/

+0

不能因素適用於x屬性直接這會給你錯了RESU LTS。相反,首先計算x位置應該在哪裏不縮放,然後應用比例因子,然後設置x屬性。 – BotMaster

+0

你好,試過了。當我放置一個別針/指針時,我可以得到正確的位置,但是當我添加比例因子時,它不會適當移動。 stage.getChildAt(i).x是縮放前的正確位置。我確定我需要一個公式,但不能想到它 – user1524122

+0

這種功能很容易實現,因爲它只涉及一個因子值。有明確的靜態位置x和y和比例因子適用於這兩個,這是它的結束。作爲一個例子,一個定義好的x:100,y:200的比例因子爲0.5:x:50,y:100。沒有什麼比這更難的了。您可以通過將新的x,y位置(縮放)除以縮放因子來檢查是否正確縮放,結果應始終爲相同的值。 – BotMaster

回答

0

從下面的移動地圖等問題中缺少一些元素。無論如何,現在它是整理出來的......

如果你不是一個數學天才,並不能同時解決2個數學公式,那麼不要一個接一個地解決它們,然後再合併它們。再次不要使用點的x,y屬性進行計算,但要創建特定的屬性(例如在自定義類中)。爲方便起見,我將在這裏將它們命名。 考慮到與x的本源屬性點:100,Y:200,在地圖上的位置(假設地圖左上角的座標,如果沒有相應的調整):

point.x = map.x + point.origin.x; 
point.y = map.y + point.origin.y; 

定位現在就解決了,你需要要解決規模這是很容易:

point.x = point.origin.x * scaleFactor; 
point.y = point.origin.y * scaleFactor; 

兩個系統現在都解決了,你可以將二者結合起來:

point.x = map.x + (point.origin.x * scaleFactor); 
point.y = map.y + (point.origin.y * scaleFactor);