自由制作+タイマー/トゥイーン
タイマーによるアニメーション
これまで, アニメーションをするには, 1フレーム進むたびに実行される関数を, 各オブジェクトのonEnterFrame
プロパティに登録していました.
ここではsetInterval関数を用いて, 一定時間間隔/後の変化を実現してみます. 言ってみればタイマーです. 次のような用途に有効です.
- 5分後(=って何フレーム後?)に突然イベントを起こしたいとき. もちろんonEnterFrame内でカウントアップしていく, 開始時刻をおぼえておいてonEnterFrame内で毎回時刻をチェックする, などの方法もありますが, setIntervalのほうがシンプルです.
- フレームレートと無関係な時間間隔でイベントを起こしたいとき. フレームレートの異なる .fla でも同じ時間が実現できます
var timer1:Object; // タイマーオブジェクト
var timer2:Object;
timer1=new Object();
timer2=new Object();
var timerId1:Number; // タイマーにつける番号
var timerId2:Number;
// 繰り返し実行したいメソッド. 名前は自由(だが下と合わせる)
timer1.repeat = function(){
// 2秒ごとに行いたい処理
trace("2 sec have passed");
}
//2000ミリ秒ごとに, timer1.repeat() を実行せよ. timerId1という番号でおぼえておけ
timerId1=setInterval(timer1,"repeat",2000);
// タイマーを解除したいときは timerId1を使う
timer2.ring = function(){
clearInterval(timerId2); // timerId2 で指定されるタイマーを解除せよ.
// この結果, 繰り返されず実行は1回だけ
// 10秒後に1度だけ行いたい処理
trace("10 sec have passed");
}
// 10000ミリ秒ごとに, timer2.ring() を実行せよ. timerId2という番号でおぼえておけ
timerId2=setInterval(timer2,"ring",10000);
課題
自分のプログラムで, この関数を使ってアニメーション/時限爆弾を実装しよう.トウィーンによるアニメーション
(クラシック)トウィーンと言われる機能で, ActionScriptを使うことなしに, 簡単なアニメーションを実現できます.
- 空白の .fla を用意します. .as は不要です
- 何かを選択した状態で シンボル化してMovieClipとしてライブラリに登録します.
- そのシンボルをステージ上のフレーム1にインスタンス化します.
- ステージ上のインスタンスをダブルクリックすると, MovieClipの原点が十字で 表示され, タブの下に のような表示が現れます. これは, ライブラリに登録されたシンボルを直接編集する状態になったことを示します. タイムラインもそのMovieClip独自のものになります. をクリックすればステージの編集にもどることができますが, いまはそうせずに, いまはMovieClipの編集を続けます.
- タイムライン上で(例えば)フレーム1-30を選択し, します.
- タイムライン上で(例えば)フレーム30を選択し, します.
- タイムライン上でフレーム1を選択し, します.
- フレーム30にあるインスタンスをステージ上でドラッグして位置を変更します.
- してみましょう.
- (例えば)フレーム10,20のインスタンスの位置も変えて, 再度 してみましょう.
- をクリックしてステージの編集に戻りましょう.
- ここまで編集していたシンボル1を, もうひとつステージ上にインスタンス化してみましょう. この動きが, 形や色と同様に, シンボルに付随するものであることがわかるでしょう.
シェイプトウィーンでは移動でなく変形, モーショントウィーンではより高度な移動や変形を実現できます.
トウィーンはFlashでアニメーションを実現するいちばん普通の方法です. ActionScriptによるアニメーションは, プログラマブルなアニメーションを実現するために後から導入されました.
トウィーンを使って, 個々のMovieClip内の動きをつけるのでなく, (PowerPointのアニメーションのような)ステージ上の移動を記述することもできます. が, 動き方が固定されるので, 今回考えているようなゲームには向かないでしょう. しかし, 面間の遷移を表現する固定のアニメーションなどには使えるかも.