2013年度 ウェブアニメーション実習(後半)
[Prev] [Home] [Next]

第3回 タイムライン制御

担当者: 斎藤進也 (saitos@fc.ritsumei.ac.jp)


★本日のテーマ

本日は、ActionScriptによるムービー管理の基本となる「タイムライン制御」を中心に講義を進める。
また、当たり判定、メニューボタンの動的配置といったインタラクティブ・コンテンツ制作における頻出テクニックを紹介する。


★タイムライン制御

素材ファイル →[download]

★インタラクティブ・コンテンツ作成テクニックス(1)


★接触(当たり)判定  hitTestObjectメソッド

サンプルファイル →[download]
DisplayObject.hitTestObject(DisplayObject ); ある表示オブジェクト(含MovieClip)が、他の表示オブジェクトと接触しているかどうかを調べ る。
接触している場合にはtrueを返し、してい ない場合にはfalseを返す。

※接触判定に使われるのは、表示オブジェクトの形状ではなく、表示オブジェクトの境界ボックスである。
※上記のDisplayObjectの部分にはインスタンス名を書く。

このページのコンテンツには、Adobe Flash Player の最新バージョンが必要です。

Adobe Flash Player を取得

//ステージにイベントリスナーを登録する。イベント=キーが押された時。
stage.addEventListener(KeyboardEvent.KEY_DOWN,keydown);

function keydown(event:KeyboardEvent) {

  //「←」キーが押された場合
  if (event.keyCode == 37) {

      //もし、carとhitmanの接触判定が偽ならば
      if (car.hitTestObject(hitman)==false) {
        car.x -= 10;

      } else {
       //carとhitmanの接触判定が真ならば
       trace("当たった!!!");
       hitman.gotoAndStop(2);
     }
    //「→」キーが押された場合
 } else if (event.keyCode == 39) {

     car.x += 10;

    if (hitman.currentFrame == 2) {
       hitman.gotoAndStop(1);
    }
  }
}


▼ 次週の内容をちょっと先取り


★サウンドの制御

ActionScript3.0によってサウンドを制御する場合、以下の3つの方式が考えられる。
方式説明
埋め込みアセットクラス方式「ライブラリ」内に読み込んで使用する。サウンドファイルは、埋め込み"アセットクラス"として登録される。
読み込み方式Flashムービーとは別にMP3ファイルを用意し、ムービー再生時にSoundクラスのloadメソッドを使って読み込み、再生を行う。
タイムライン配置方 式任意のムービークリップのタイムラインにサウンドを配置しておき、そのムー ビークリップを再生することで、サウンドを鳴らす。

ここでは、「埋め込みアセットクラス方式」によるサウンド制御の手順について解説する。


☆指示に従いながら、プログラミングしてみましょう。

(1)音源を用意する。
インターネット上には、無料で音源を提供しているサイトが多く存在する。
ただし、それらのサイトを利用する際には、利用規約をしっかりと守る必要がある。
また、利用規約はサイトによって異なるため、注意が必要。


●フリー音源提供サイトのリンク集

ここでは、「音の葉っぱ~効果音・ジングル・BGMのフリー音素材集~」より、音源を借用させて戴いた。
(2)音源(mp3ファイル)をライブラリに読み込み、リンケージの設定(クラス名の設定)を行う。



リンケージの設定。クラス名を付ける。

(2)ActionScriptの記述
まず、new演算子を用いて、インスタンスを作成する。
new クラス名(); インスタンスを生成する。
具体的には、次のように記述する。Sound型の変数に代入するというかたちをとる。
var s:Sound = new sound_1();

play()メソッド、stop()メソッドを用いて、再生/停止する。
Sound.play(); サウンドを再生する。
※Soundの部分は、使用する変数名がくる。上記の例でいうと「s」。「s.play();」となる。

また、サウンドの再生時に、それを「サウンドチャネル」に割り当てておくと、サウンドを制御する際に便利である。
SoundChannel型の変数を宣言し、サウンドの再生時に返される値をそこに格納するというかたちをとる。
var s_channel:SoundChannel = s.play();

サウンドを停止する場合は、下記のように書く。
SoundChannel.stop(); 管理しているサウンドを停止する。

上記の例に当てはめると、
s_channel.stop();
[※ミスに注意!!]上記の例でいうと、「s.stop();」としがちだが、これではダメ。

サンプル1

var wd_snd:Sound = new wd();
var wd_sndch:SoundChannel;
var f:int = 0; //0の時、停止中。 1の時、再生中。

play_btn.addEventListener(MouseEvent.CLICK,onSndPlay);

function onSndPlay(e:MouseEvent){
if(f==0){
/**
* 再生する。
*/
wd_sndch = wd_snd.play();
f=1;
play_btn.saisei.text = "停止"; 
}else{
/**
* 停止する。
*/
wd_sndch.stop();
f=0;
play_btn.saisei.text = "再生";
}
}

サンプル2

stage.addEventListener(KeyboardEvent.KEY_DOWN,key_sound);
var space_snd:Sound = new bm1();
var right_snd:Sound = new bm2();
var left_snd:Sound = new bm3();

function key_sound(evt:KeyboardEvent){
//trace(evt.keyCode);
//space=32 右=39 左=37
if(evt.keyCode==32){
trace("space");
space_snd.play();
}else if(evt.keyCode==39){
trace("右");
right_snd.play();
}else if(evt.keyCode==37){
trace("左");
left_snd.play();
}

}


★本日の課題


課題1

何か絵もしくは図を描きなさい。
そして、上の「経絡秘孔」のプログラムを参考に、絵や図の特定の部分にマウスポインターを合わせると、その部分についての説明を含む「吹き出し」が表示されるようにしなさい。

余裕のある人は、吹き出しの表示内容にアニメーションを設定するなどの工夫をしてください。

本課題は「個人課題」です。

発展課題

前回の講義において作成したUFOのプログラムを改造しなさい。
UFOの他に何か別の物体(いん石や小惑星等)を用意し、UFOがその物体に衝突した際に「GAME OVER」と画面表示するようにしなさい。

「GAME OVER」は、traceメソッドを用いた出力ではなく、ステージ上にテキストフィールドを用意し、そこに表示するようにすること。
[Prev] [Home] [Next]