2012-02-29 7 views
0

私はクリックしてドラッグして矩形を拡大しようとしています。以下のコードは、の種類のですが、パフォーマンスと精度の改善が期待されています。そのアイデアは、水平方向にだけクリック、ドラッグ、サイズ変更することです。 1つの不満な点は、マウスがダウンしてもMC上ではなくなったときにスクロールを停止することです。AS3マウスを使ってMCをスケーリングする...並べ替え

var isPressed:Boolean = false; 

mcMXredBox.addEventListener(MouseEvent.MOUSE_MOVE, moved); 
mcMXredBox.addEventListener(MouseEvent.MOUSE_DOWN, pressed); 
mcMXredBox.addEventListener(MouseEvent.MOUSE_UP, released); 


function moved(e:Event):void{ 
if (isPressed) 
this.scaleX = 1 + (mouseX/100); 
} 

function pressed(e:MouseEvent):void{ 
isPressed = true; 
moved(e); 
} 
function released(e:MouseEvent):void{ 
isPressed = false; 
} 

答えて

1

私は以下のようなものに変更したい:

mcMXredBox.addEventListener(MouseEvent.MOUSE_DOWN, pressed); 

var initMouseX; 

function moved(e:Event):void{ 
    this.width += (mouseX - initMouseX); 
    initMouseX = mouseX; 
} 

function pressed(e:MouseEvent):void{ 
    initMouseX = mouseX; 

    stage.addEventListener(MouseEvent.MOUSE_UP, released); 
    stage.addEventListener(MouseEvent.MOUSE_MOVE, moved); 

    moved(e); 
} 

function released(e:MouseEvent):void{ 
    stage.removeEventListener(MouseEvent.MOUSE_UP, released); 
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, moved); 
} 

マウスが押されたときのリスナーを追加する(離すと削除)することで、あなたをマウスが停止しているかどうかを確認するためにポーリングする必要がなくなり、ドラッグしていないときのパフォーマンスが低下します。ステージに追加すると、マウスがオブジェクトの上になくなったときに登録されないという問題が解決されます。最後に、ドラッグの数学を計算するためのいくつかの微調整があります。

+0

うん、うまくいく。ポーリングのことは理にかなっていますし、ドラッグの調整も良くなっています。 MCがスケーリングの方向に少し移動する理由はありますか?スケールアップもちょうどそれを引き出しますか? – user1203605

+0

シンボルの登録ポイントは左端(x = 0)にありますか?そうでない場合、スケーリングの際にオブジェクトが動くことがあります。 – DNJohnson

+0

あまりにもそれを移動しようとしたが、まだ座っていない。私はそれがドラッグや何かのための数学にあると思う。 – user1203605

0

、おそらく、ステージを親表示オブジェクトにMouseEvent.MOUSE_MOVEMouseEvent.MOUSE_UPイベントを追加しますか。例えば

mcMXredBox.addEventListener(MouseEvent.MOUSE_DOWN, pressed); 
stage.addEventListener(MouseEvent.MOUSE_MOVE, moved); 
stage.addEventListener(MouseEvent.MOUSE_UP, released); 
関連する問題