web-dev-qa-db-ja.com

最後のフレームで停止(フラッシュ)

ムービークリップを1回再生し、最後のフレームで停止したい。ムービークリップクラスのループで次のコードを使用します。 (これはas3です)

if(currentFrame == 120)
stop();

120が最後のフレームです。一度再生します。しかし問題は、それが再びフレーム1に戻ることです。特定のフレームでムービークリップを停止するためのより良い方法はありますか。

6
numerical25

オブジェクトが2回呼び出されたためです。

1
numerical25

Actionscriptでそれを行い、タイムラインの最後のフレームにstop()を手動で追加したくない場合は、文書化されていない addFrameScript() メソッドを使用できます。

mc.addFrameScript(mc.totalFrames - 1, function():void 
{
    mc.stop();
});

関数のスコープを思い出せませんが、mc.stop()を使用するか、単にstop()を使用することができます。

* EDIT-追加-1 addFrameScriptの最初のパラメーター。ゼロベースであるため(つまり、frameScriptをフレーム10に配置するには、を配置します) 9)。

12
Adam Harte

最も簡単な方法:

  1. タイムラインの最後のフレームを選択するだけです。 [操作]ウィンドウを開きます(F8)。選択したフレームがまだ選択されていることを確認します。選択されていない場合は、[アクション]ペインが開いているときにもう一度選択します。
  2. 選択した後、「アクションフレーム」ペインに単純なstop()関数を追加するだけです。

    //add the following line to the actions pane of the last frame.
    stop();
    
  3. 完了です。オプションで、必要に応じて再生ボタンを追加できます。

3
Sagar

タイムラインでは、最後にキーフレームを配置し、そこにstop();メソッドを追加できます。そのフレームに到達すると、stop();メソッドが実行され、クリップが停止します。

つまり、タイムラインを使用していると仮定しますが、使用しているように聞こえます。

3
Tyler Egeto

これはあなたが探しているものに沿っているようです:

addEventListener(Event.ENTER_FRAME, function(e:Event){
    if(currentFrame == totalFrames){
      stop();
      removeEventListener(event.type, arguments.callee);
    }
});

イベントリスナー(Actionscript 3用)を追加したので、すべてのフレームでこの関数が起動し、どのフレームにあるかを確認します。それが最後のフレームである場合、それは停止します。あなたの例に基づいて、MovieClipを拡張するクラスがあると思います。

0
Newtang

私はそれを考え出した。正直なところ、私のアプリケーションには欠陥があると思います。それは奇跡的に働き、私は何もしませんでした。私のループでは、if(currentframe == totalframes)を実行しましたが、以前は発生しなかったことが完全に発生しています。理由はわかりません。しかし、私が言ったように、それはソフトウェアの問題かもしれません。なぜなら、私は時々、コンストラクターを介して値を渡すのに問題があるからです。そして、それらの値を受け入れるための特別なメソッドを作成する必要があります。

0
numerical25

それをいじってみると、問題はフラッシュが私のstop()関数に応答しないこととは何の関係もないことを私は知っています。フラッシュがムービークリップを2回呼び出すことと関係があるのではないかと思います。積み重ねて。最初からやり直したように見せます。私はわかりません。ムービークリップを他の場所に呼び出すと、機能します。私のループではありません。私はトレースを実行しましたが、トレースは1回しか表示されませんでした。これは、トレースが1回開始されたことを示しています。

0
numerical25