2017-09-01 86 views
1

我一直在尋找一種方式去做一件看起來很簡單的事情。 我有一個完美的鼠標滾輪縮放功能,因爲在每個功能之後,增量值被重置爲0。 看起來的縮放手勢並不那麼簡單? 我的問題是,我正在嘗試創建動態縮放限制(每個級別的最大縮放比例都會有所不同)。並且縮放會卡在我設置的最大比例尺範圍內,不能縮小。我正在嘗試使用e.scaleX屬性來確定方向,以便您可以縮小,但無法正常工作。AS3 - 縮放手勢獲取縮放方向?

感謝您的幫助! 代碼:

Multitouch.inputMode = MultitouchInputMode.GESTURE; 
stage.addEventListener(TransformGestureEvent.GESTURE_ZOOM , onZoom); 
function onZoom (e:TransformGestureEvent):void{ 
    var zoomAmountGesture:Number = 0; 
    zoomAmountGesture = e.scaleX; 

    if (zoomAmountGesture <= 0){ 
container.scaleX *= e.scaleX; 
container.scaleY *= e.scaleY; 
     if (container.scaleX < 1){ 
      container.scaleX = 1; 
      container.scaleY = 1 
     } 
    } 
    if (zoomAmountGesture > 0){ 
    container.scaleX *= e.scaleX; 
    container.scaleY *= e.scaleY; 
     if(4* BlockSize * container.scaleX > StageWidth){ 
      trace("zoom too big"); 
      var newBlockScale:Number = StageWidth/3; 
      var newBoardScale:Number = newBlockScale/BlockSize; 
      trace("newBoardScale = " + newBoardScale); 
      container.scaleX = newBoardScale; 
      container.scaleY = newBoardScale; 
     } 
    } 
} 

回答

0

的TransformGestureEvent的快速閱讀。

下一塊沒有任何意義,因爲該事件的scaleX的scaleY特性是基於1:

if (zoomAmountGesture <= 0){ 

然後,你應該有以下幾點入手:

function onZoom (e:TransformGestureEvent):void 
{ 
    var aScale:Number = container.scaleX * e.scaleX; 
    if (aScale < 1) aScale = 1; 
    if (aScale > PredefinedMaxScale) aScale = PredefinedMaxScale; 

    container.scaleX = aScale; 
    container.scaleY = aScale; 
} 
+0

我標記你的答案是正確的,因爲我認爲它確實回答了我的問題。儘管我知道我沒有足夠的解釋或提供足夠的代碼,但我仍然遇到了特定情況的問題。我遇到的問題是var BlockSize每個級別都會變化(變小),所以最大縮放不是一個設定量,而是基於該級別的相對塊大小。因此,對於1級,最大變焦可能是1.2,但10級或20的最大變焦可能是4或5。我試圖找出邏輯,我覺得我幾乎沒有和你的回答也幫我搬這個向前,所以謝謝你! –

+0

@ZacKenny實際上,你可以通過值的陣列設置最大變焦,甚至計算出它在每個級別開始與** stage.stageWidth /塊大小**。 – Organis

+0

是的!這正是我最終做的。感謝@Organis的幫助! 功能onZoom(E:的TransformGestureEvent):無效{ \t VAR newBlockScale:總數= BLOCKSIZE * 4; \t \t VAR PredefinedMaxScale:總數= StageWidth/newBlockScale; \t跟蹤( 「PredefinedMaxScale =」 + PredefinedMaxScale); var aScale:Number = container.scaleX * e.scaleX; 如果(ASCALE <1){ASCALE = 1;} 如果(ASCALE> PredefinedMaxScale){ASCALE = PredefinedMaxScale;} container.scaleX = ASCALE; container.scaleY = aScale; } –