Flash CS3 ドキュメンテーション |
|||
| ActionScript 3.0 のプログラミング > ムービークリップの操作 > ムービークリップの再生の制御 | |||
Flash では、タイムラインのメタファーを使用して、アニメーションまたは状態の変化を伝達します。タイムラインを使用するビジュアルエレメントは、MovieClip オブジェクトか、または MovieClip クラスの拡張である必要があります。ActionScript ではムービークリップの停止、再生、またはタイムラインの別のポイントへの移動を指示できますが、ActionScript を使用してタイムラインを動的に作成したり、特定のフレームにコンテンツを追加したりすることはできません。これには、Flash オーサリングツールを使用する必要があります。
MovieClip の再生は、SWF のフレームレートで指定された速度でタイムラインに沿って行われます。また、ActionScript で Stage.frameRate プロパティを設定すると、この設定をオーバーライドできます。
play() および stop() メソッドを使用すると、タイムライン内でムービークリップの基本的な制御を行うことができます。たとえば、画面上を走る自転車のアニメーションを含むステージ上にムービークリップシンボルがあり、そのインスタンス名が bicycle に設定されているとします。メインタイムラインのキーフレームに次のコードが関連付けられている場合、
bicycle.stop();
自転車は動きません。つまり、アニメーションは再生されません。自転車の動きは、他のユーザー操作によって開始することができます。たとえば、startButton という名前のボタンがある場合、ボタンをクリックするとアニメーションが再生されるように、メインタイムライン上のキーフレームのコードが実行されます。
// この関数は、ボタンをクリックしたときに呼び出されます。つまり、
// 自転車のアニメーションが再生されます。
function playAnimation(event:MouseEvent):void
{
bicycle.play();
}
// この関数を、ボタンのリスナーとして登録します。
startButton.addEventListener(MouseEvent.CLICK, playAnimation);
ムービークリップで再生を制御する方法は、play() および stop() メソッドだけではありません。nextFrame() および prevFrame() メソッドを使用すると、再生ヘッドをタイムラインに沿って手動で前後に動かすことができます。これらのメソッドのいずれかを呼び出すと、再生が停止して、再生ヘッドが前方または後方に 1 フレームずつ動きます。
play() メソッドを使用することは、ムービークリップオブジェクトの enterFrame イベントがトリガーされるたびに nextFrame() を呼び出すのに似ています。次の例では、enterFrame イベントにイベントリスナーを作成して bicycle をリスナー関数の前のフレームに戻すことによって、bicycle のムービークリップを逆方向に動かすことができます。
// この関数は、enterFrame イベントがトリガーされたときに呼び出されます。つまり、
// フレームごとに呼び出されます。
function everyFrame(event:Event):void
{
if (bicycle.currentFrame == 1)
{
bicycle.gotoAndStop(bicycle.totalFrames);
}
else
{
bicycle.prevFrame();
}
}
bicycle.addEventListener(Event.ENTER_FRAME, everyFrame);
ムービークリップに複数のフレームが含まれている場合、ムービークリップの再生は無限に繰り返されます。つまり、最後のフレームの再生が終わると最初のフレームに戻ります。prevFrame() または nextFrame() を使用すると、この動作は自動的には行われません。つまり、再生ヘッドが最初のフレーム上にあるときに prevFrame() を呼び出しても、再生ヘッドは最後のフレームに移動しません。上記の例の if 条件では、逆方向の再生ヘッドが最初のフレームまで到達したかどうかを確認し、最初のフレームに到達した場合に再生ヘッドを最終フレームに設定することによって、ムービークリップの逆方向連続再生を実現しています。
ムービークリップを新しいフレームに進めるのは簡単です。gotoAndPlay() または gotoAndStop() を呼び出すと、ムービークリップはパラメータで指定されたフレーム番号までジャンプします。あるいは、フレームラベルの名前と同じ文字列を渡すこともできます。タイムライン上の任意のフレームに、ラベルを割り当てることができます。ラベルを設定するには、タイムライン上のフレームを選択して、プロパティインスペクタの [フレームラベル] フィールドに名前を入力します。
複雑なムービークリップを作成する場合を考えると、番号の代わりにフレームラベルを使用する利点は明らかです。アニメーションのフレーム、レイヤー、およびトゥイーンの数が大きくなる場合は、重要なフレームにムービークリップの動作を表す説明として "オフ"、"ウォーキング"、または "ランニング" などを付けるようにしてください。ラベル付きフレームに移動する ActionScript 呼び出しは、指定のフレーム番号ではなく単一の参照、つまりラベルに対するポインタであるため、読みやすさと柔軟性が向上します。アニメーションの特定のセグメントを、後から別のフレームに移動する場合でも、移動先のフレームに対して同じラベルを使用する限りは、ActionScript コードを変更する必要はありません。
コードのフレームラベルを表示するため、ActionScript 3.0 には FrameLabel クラスがあります。このクラスの各インスタンスは単一のフレームラベルを表し、プロパティインスペクタで示されるフレームラベル名を表す name プロパティと、frame プロパティがあります。後者のプロパティは、タイムライン上でラベルが配置されているフレームの番号を示します。
ムービークリップインスタンスに関連付けられている FrameLabel インスタンスへのアクセスを可能にするため、MovieClip クラスには FrameLabel オブジェクトを直接返すプロパティが 2 つあります。currentLabels プロパティは、ムービークリップのタイムライン全体のすべての FrameLabel オブジェクトで構成される配列を返します。currentLabel プロパティはタイムラインで最後に到達したフレームラベルである単一の FrameLabel オブジェクトを返します。
ロボット (robot) という名前のムービークリップを作成し、そのアニメーションのさまざまな状態にラベルを付ける場合を考えます。次のコードでは、currentLabel プロパティをチェックする条件を設定して、ロボットの現在の状態を確認しています。
if (robot.currentLabel.name == "walking"
{
// 何らかの処理を実行します。
}
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000212.html