2017-09-01 108 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; } –