2017-09-01 12 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の迅速な読み取りを持っていました。その後

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

イベントscaleXプロパティscaleYのプロパティが1ベースであるため、

は、次のブロックでは、意味がありません私はそれが私の質問に答えると思うので、私はあなたの答えを正しいものとしてマークしました。私はまだ自分の具体的な状況に問題がありますが、十分に説明したり、コードを十分に提供しなかったことがわかっています。私が抱えている問題は、すべてのレベルでvar BlockSizeが変化する(小さくなる)ことです。そのため、最大ズームは設定された量ではなく、そのレベルの相対ブロックサイズに基づいています。レベル1の最大ズームは1.2ですが、レベル10または20の最大ズームは4または5かもしれません。私はロジックを理解しようとしています。私はほとんどそこにいると思います。転送しますので、ありがとうございます! –

+0

@ ZacKenny実際には、値の配列を使って最大ズームを設定することも、各ステージで** stage.stageWidth/BlockSize **で開始することもできます。 – Organis

+0

はい!これはまさに私がやったことです。ヘルプ@オルガン!ありがとう! onZoom(e:TransformGestureEvent):void { \t var newBlockScale:Number = BlockSize * 4; \t \t var PredefinedMaxScale:Number = StageWidth/newBlockScale; \tトレース( "PredefinedMaxScale =" + PredefinedMaxScale); var aScale:Number = container.scaleX * e.scaleX; if(aScale <1){aScale = 1;} if(aScale> PredefinedMaxScale){aScale = PredefinedMaxScale;} container.scaleX = aScale; container.scaleY = aScale; } –

関連する問題