1

私は Flash CS5.5 でエア モバイル アプリを開発していますが、これはかなり新しいものです。

ここに私の問題があります: base と呼ばれる movieClip 内にすべてのコンテンツを配置しました。movieClip が実行されているデバイスとデバイスの向きに基づいて、movieClip のサイズを変更するコードを作成しました。その部分は問題なく動作しますが、問題はズーム機能を作成しようとしたときです。

ベースの movieClip はスケーリングしますが、コンテンツがデバイスの幅より小さくスケーリングされないように、最小境界を機能させるのに問題があります。サイズ変更されたベース幅ではなく、元のベース幅を参照していると思います。サイズ変更関数の後に新しいベース幅を呼び出す方法についてのアイデアはありますか? 以下の私のコードを参照してください。事前に助けてくれてありがとう:)

import flash.geom.Rectangle;

stop();

base.play();

stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

var guiSize:Rectangle = new Rectangle(0, 0, 480, 800);
var appScale:Number = 1;


stage.addEventListener(Event.RESIZE, handleResize);
function handleResize(e:Event):void {
     var deviceSize:Rectangle = new Rectangle(0, 0,  stage.stageWidth, 
     stage.stageHeight);
appScale = deviceSize.width / guiSize.width;
base.width = appScale * guiSize.width; 
base.height = appScale * guiSize.height;

Multitouch.inputMode = MultitouchInputMode.GESTURE;
base.addEventListener(TransformGestureEvent.GESTURE_ZOOM , onZoom); 
function onZoom (e:TransformGestureEvent):void{ 

if (base.scaleX * e.scaleX < 1)
{}
else if (base.scaleX * e.scaleX > 5) 
{}
else {
base.scaleX *= (e.scaleX+e.scaleY)/2; 
       base.scaleY *= (e.scaleX+e.scaleY)/2;}
}
}
4

1 に答える 1

0

コードをいじってさまざまな解決策を試した後、以下のコードを思いつきましたが、うまくいくようです。問題は、ズーム機能の base.scaleX 変数をスローするサイズ変更機能の後に、ベースの movieClip が拡大されたことです。これは、base.scaleX が 1 より大きいためです。ここで問題を見ることができます:

if (base.scaleX * e.scaleX < 1)

このコードにより、ベースの movieClip がデバイス ウィンドウよりも小さく縮小されていました。私の解決策は、代わりに新しい base.width を使用して、ズーム機能の最小および最大スケーリングを決定することです。以下のとおりです。

function onZoom (e:TransformGestureEvent):void{ 
       if (base.width * e.scaleX < deviceSize.width )
       {}
else if (base.width * e.scaleX > deviceSize.width * 2 ) 
{}
else {
base.scaleX *= (e.scaleX+e.scaleY)/2; 
       base.scaleY *= (e.scaleX+e.scaleY)/2;}
}
}
于 2012-12-12T15:39:53.560 に答える