AS3 - 缩放手势得到缩放方向?

时间:2017-09-01 21:19:26

标签: actionscript-3 zoom gesture

我一直在寻找一种方法来做一个看起来非常简单的任务。 我有一个鼠标滚轮缩放功能,它完美地工作,因为在每个功能之后delta值被重置为0。 变焦手势似乎不是那么简单? 我的问题是我正在尝试创建动态缩放限制(每个级别的最大缩放将不同)。并且变焦在我设置的最大比例下卡住,无法缩小。我正在尝试使用e.scaleX属性来识别方向,以便您可以缩小,但它无法正常工作。

感谢您的帮助! 代码:

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;
        }
    }
}

1 个答案:

答案 0 :(得分: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;
}