2011-08-05 8 views
1

私はこのトゥイーンの移行を持っています。毎回ボタンXをクリックすると、ムービクリップ(長方形)が少し動かされます(varx + numberx)。Actionscript 3.0:同じムービークリップで新しいトゥイーンを開始する場合は、前のトゥイーンを中止する必要がありますか?

var myTween:Tween = new Tween(rectangle, "x", Strong.easeOut, currentposx, varx, 3, true); 

私が迷惑メールボタンXを押してしまえば、しばらくしてからコンピュータが遅くなってしまいます。しかし、どういうわけか私は問題の原因を見つけることができません。私の推測では、トゥイーントランジションをオーバーライドするたびに、以前はまだ何らかの形で元のままです。

トゥイーンを上書きする必要がありますか?

+0

トゥイーンの持続時間は3ですか? 3秒? –

+0

通常、このような場合には注意が必要なトゥイーンライブラリを使用することをお勧めします。 –

答えて

1

ボタンを使用すると、アプリケーションが遅くなることはありません。だから間違ったことがある。

  • A)そのあなたのコード
  • B)その彼らのコード(トゥイーン)

だから何が起こる可能性があり:

- Time 0 sec - Button click - 1. tween starts, duration 3 sec. 
- Time .1 sec - Button click - 2. tween starts, duration 3 sec. 
- Time .2 sec - Button click - 3. tween starts, duration 3 sec. 

我々は0.1の間隔で新しいトゥイーンを開始秒である。 3セク後。私たちは同時に30のトゥイーンを走らせます。

この時点で、最初のトゥイーンは終了し、表示オブジェクト(フレーム入力)またはタイマーによって送出されたイベントから登録解除されます。明らかにそうではなく、あなたのアプリケーションはトゥイーンでトゥイーンを追加しますが、どちらも終了していません。

トゥイーンがcurrentposxvarxの間の距離をチェックし、両方が等しい場合にのみトゥイーンが停止する可能性があります。現在のところトゥイーンが並んでいるため、このような状況は起こり得ず、トゥイーンはディスプレイオブジェクトを何度も何度も移動しようとし続けます。

実行中のコードが完全に表示される場合は、これをプロファイラでテストできます。

:とにかく

、あなたがそのような_currentTweenとして永続的な変数に現在のトゥイーンを保存し、新しいものを開始する前にトゥイーンを殺すか、もう一度ボタンをクリックすると、単純に現在のトゥイーンの値を更新すべきです -

private var _currentTween : Tween; 

private function buttonClickedVersionA() : void { 
    if (_currentTween) _currentTween.stop(); // or whatever it is called 
    _currentTween = new Tween(...); 
} 

private function buttonClickedVersionB() : void { 
    if (!_currentTween) { 
     _currentTween = new Tween(...); 
    } else { 
     _currentTween.start = currentposx; 
     _currentTween.end = varx; 
     _currentTween.restart(); // or whatever 
    } 
} 
+0

あなたが言ったように、現在のトゥイーンを永続変数に格納することは問題を解決するようです。私はもう少し行動を監視する必要があります。それが動作しない場合、私はあなたの例のように最初にトゥイーンを停止しようとします。ありがとうございました。 – huuerequer

関連する問題