2011-11-15 11 views
1

マウスオーバーがイベントの上にあるときにムービーを逆方向に再生し、マウスがインスタンスの上に停止している間に停止する関数(mouseoverイベントによって呼び出される)を作成しようとしています。WhileループがActionScript 3.0で動作しない

これは私がこれまで持っているものです。

var b2:rightButton = new rightButton(); //new instance 
b2.X = 550; //instances position 
addChild(b2); //add instance to stage 
b2.alpha = .4; // set instances alpha 
var num = 0; // new variable called 'num' 
b2.addEventListener(MouseEvent.ROLL_OVER, rightScroll); //mouse event for roll over 

function rightScroll(event:MouseEvent) { //the function 
    num = 1; //set num to 1 
    b2.alpha = .8; //set alpha to 80% 
} 

b2.addEventListener(MouseEvent.ROLL_OUT, no_rightScroll); //event for roll out 

function no_rightScroll(event:MouseEvent){ //roll- out function 
    num = 0; //set num back to 0 
    b2.alpha = .4; //set alpha back to 40% 
} 

while (num == 1){ // while num =1 (while mouse is over) 
    prevFrame(); //goto previous frame 
} 

は、誰もがそれを修正する方法を知っている、またはこれを行うには良い方法でしょうか?

+0

これはクラス内にカプセル化されているのですか、それともフレームスクリプトですか?ボタンのアクションでリスナーを追加したり削除したりすると、効果が得られます。それがフレームスクリプトなら、おそらく深刻な範囲の問題にぶつかっているでしょう。 –

+0

ここでスコープの問題はありませんが、アニメーション用のループを使用するのは悪い考えです。 – shanethehat

答えて

4

現時点でのコードの問題は、ループがムービーのフレームレートに沿って実行されないため、コードでprevFrame()が1回のフレームで何度も何度も呼び出されるということです。これは、あなたのプログラムをクラッシュさせる無限ループにつながり、アニメーションに関しては全く役に立たない。

最も良い方法は、ムービーのENTER_FRAMEイベントをリッスンし、イベントが送出されるたびに再生ヘッドを1フレーム戻すことです。

var b2:rightButton = new rightButton(); //new instance 
b2.X = 550; //instances position 
addChild(b2); //add instance to stage 
b2.alpha = .4; // set instances alpha 

b2.addEventListener(MouseEvent.ROLL_OVER, rightScroll); //mouse event for roll over 
function rightScroll(event:MouseEvent):void { //the function 
    stage.addEventListener(Event.ENTER_FRAME,moveBackwards); //add stage listener 
    b2.alpha = .8; //set alpha to 80% 
} 

b2.addEventListener(MouseEvent.ROLL_OUT, no_rightScroll); //event for roll out 
function no_rightScroll(event:MouseEvent):void { //roll- out function 
    stage.removeEventListener(Event.ENTER_FRAME,moveBackwards); //remove stage listener 
    b2.alpha = .4; //set alpha back to 40% 
} 

function moveBackwards(evt:Event):void { 
    prevFrame(); 
} 
+0

あなたは完全な構文を投稿できますか?とにかく答えるためのThnks:D –

+0

完全な構文はどういう意味ですか?私は現在自分の電話にいるので、コードを簡単に編集することはできませんが、必要なものを教えてくれれば、後で答えを更新します。 – shanethehat

+0

それだけの完全なコード(フレーム入力イベントを追加する方法など)は可能です。お願いします。 –

2

Greensock TweenLiteライブラリを使用すると、読み書きがはるかに簡単になるでしょう。 Tweenliteは他の数値と同様に簡単にフレームをトゥイーンできます。イベントリスナー内

、この追加してみてください:それは1秒の期間に伴って直線的に1をフレームにあなたのムービークリップ(この例ではtargetMC)をトゥイーンします

TweenLite.to(targetMC, 1, { frame:1, ease:fl.transitions.easing.None.easeNone }); 

を。 Tweenliteの他のパラメータも使用して遊んでいます。

関連する問題