[Prev] 
[Home] 
[Next] 
第3回 タイムライン制御 
担当者: 斎藤進也 (saitos[at]fc.ritsumei.ac.jp)
 
★本日のテーマ 
本日は、ActionScriptによるムービー管理の基本となる「タイムライン制御」を中心に講義を進める。
また、当たり判定、メニューボタンの動的配置といったインタラクティブ・コンテンツ制作における頻出テクニックを紹介する。
★タイムライン制御(pp.87-102)  
素材ファイル →
[download] 
 再生ヘッドの移動:ファイルの再生や停止、指定したフレームへの移動 
MovieClip.stop();  
 
ムービークリップの再生ヘッドを停止する。
 
  
MovieClip.
play();
 
 
 
ムービークリップの再生ヘッドをを”再生状態”にする。
 
  
MovieClip.
gotoAndStop( フレーム); 
 
 
再生ヘッドを特定のフレームに移動させて停止させる。
 
  
MovieClip.
gotoAndPlay( フレーム); 
 
 
再生ヘッドを特定のフレームに移動させて、そこから再生状態にする。
 
  
      
this.play_btn.addEventListener(MouseEvent.MOUSE_DOWN,play_m);
this.stop_btn.addEventListener(MouseEvent.MOUSE_DOWN,stop_m);
this.onna_btn.addEventListener(MouseEvent.MOUSE_DOWN,onna_m);
this.hajime_btn.addEventListener(MouseEvent.MOUSE_DOWN,hajime_m);
function play_m(evt:MouseEvent){
  this.play();
  trace("現在のフレームは="+currentFrame);
}
function stop_m(evt:MouseEvent){
  this.stop();
  trace("現在のフレームは="+currentFrame);
}
function onna_m(evt:MouseEvent){
  this.gotoAndPlay(28);
  trace("現在のフレームは="+currentFrame);
}
function hajime_m(evt:MouseEvent){
  this.gotoAndStop(1);
  trace("現在のフレームは="+currentFrame);
}
 
 
 フレームラベルを付けるキーフレーム を選択し、[プロパティ]のフレー
ムの項目に記入。
this.play_btn.addEventListener(MouseEvent.MOUSE_DOWN,play_m);
this.stop_btn.addEventListener(MouseEvent.MOUSE_DOWN,stop_m);
this.onna_btn.addEventListener(MouseEvent.MOUSE_DOWN,onna_m);
this.hajime_btn.addEventListener(MouseEvent.MOUSE_DOWN,hajime_m);
function play_m(evt:MouseEvent){
  this.play();
  trace("現在のフレームは="+currentFrame);
}
function stop_m(evt:MouseEvent){
  this.stop();
  trace("現在のフレームは="+currentFrame);
}
function onna_m(evt:MouseEvent){
  this.gotoAndPlay('woman');
  trace("現在のフレームは="+currentFrame);
}
function hajime_m(evt:MouseEvent){
  this.gotoAndStop('first');
  trace("現在のフレームは="+currentFrame);
}
 
 
 入れ子構造のインスタンスのタイムライン制御
→[download]
 
      
this.boy.hikou_1.addEventListener(MouseEvent.MOUSE_OVER,disp_a);
this.boy.hikou_1.addEventListener(MouseEvent.MOUSE_OUT,disp_b);
this.boy.hikou_2.addEventListener(MouseEvent.MOUSE_OVER,disp_c);
this.boy.hikou_2.addEventListener(MouseEvent.MOUSE_OUT,disp_d);
this.boy.hikou_3.addEventListener(MouseEvent.MOUSE_OVER,disp_e);
this.boy.hikou_3.addEventListener(MouseEvent.MOUSE_OUT,disp_f);
function disp_a(e:MouseEvent){
  this.boy.hikou_1.gotoAndStop(2);
}
function disp_b(e:MouseEvent){
  this.boy.hikou_1.gotoAndStop(1);
}
function disp_c(e:MouseEvent){
  this.boy.hikou_2.gotoAndStop(3);
}
function disp_d(e:MouseEvent){
  this.boy.hikou_2.gotoAndStop(1);
}
function disp_e(e:MouseEvent){
  this.boy.hikou_3.gotoAndStop(4);
}
function disp_f(e:MouseEvent){
  this.boy.hikou_3.gotoAndStop(1);
}
 
 
 
  
★インタラクティブ・コンテンツ作成テクニックス(1)
 
 
★接触(当たり)判定   hitTestObjectメソッド(p.130)
 
サンプルファイル 
→[download] 
DisplayObject.hitTestObject( DisplayObject );  
 
ある表示オブジェクト(含MovieClip)が、他の表示オブジェクトと接触しているかどうかを調べ
る。true を返し、してい
ない場合にはfalse を返す。
 
※接触判定に使われるのは、表示オブジェクトの形状ではなく、表示オブジェクトの境界ボックスである。
      
//ステージにイベントリスナーを登録する。イベント=キーが押された時。
stage.addEventListener(KeyboardEvent.KEY_DOWN,keydown);
function keydown(event:KeyboardEvent) {
  //「←」キーが押された場合
  if (event.keyCode == 37) {
      //もし、carとhitmanの接触判定が偽ならば
      if (this.car.hitTestObject(this.hitman)==false) {
        this.car.x -= 10;
      } else {
       //carとhitmanの接触判定が真ならば
       trace("当たった!!!");
      this.hitman.gotoAndStop(2);
     }
    //「→」キーが押された場合
 } else if (event.keyCode == 39) {
   this.car.x += 10;
    if (this.hitman.currentFrame == 2) {
      this.hitman.gotoAndStop(1);
    }
  }
}
 
 
★
ウェブデザインテクニックス(1): メニューボタンの動的配置
 
通常、企業などの自社サイトは、トピックごとに分けられ、それぞれにページが用意されている。
そして、サイトのトップページ(ホームページ)には、各トピックへのリンクが張られたボタン、あるいはナビゲーションバーが用意されている。
Flashを使うことで、そうしたボタンの作成、リンクの定義などを容易におこなうことが出来る。
一方で、ボタンやナビゲーションバーなどを固定的なものにしてしまうと、トピックを変更、追加することが容易におこなえなくなってしまうことがある。
そうした場合に備え、ActionScriptを用いてフレキシブルにメニューボタンを配置する仕組みを紹介する。
ここでは、外部に用意したXMLファイルを読み込み、XMLに記載される情報を元にボタンを配置する。
一見、面倒そうにみえるが、一度作ってしまえば、その後の編集や管理がとても楽。
[サンプルファイル] menuBtn.fla 
[サンプルファイル] menu.xml 
<手順>
 ボタンを作る。
       ムービークリップ型でボタン用のシンボルを作成。 ライブラリでリンケージの設定をおこなう。  
      
  XMLファイルを作る。
<?xml      version="1.0 "?>  
<menu>  <button>  <label>  
Rits</label> <url>  
http://www.ritsumei.jp/
</url>  </button> <button> <label> 
Yahoo</label> <url> 
http://www.yahoo.co.jp/</url>   </button> </menu> 
       
※XMLとは 
参考1
 
参考2 
参考3
 
 ActionScriptを書く。
var  xmlfile:XML ;var  i:int  = 0; 
var  loader:URLLoader = new  URLLoader();
loader.load (new  URLRequest("menu.xml" ));loader.addEventListener (Event.COMPLETE,xmlLoaded);
function  xmlLoaded(e:Event):void {        
    xmlfile = new  XML (loader.data );
  
    for  each (var  button:XML  in  xmlfile.button){
      var  menu_btn:btn = new  btn();                
      menu_btn.menu_t.text  = String (button.label );      menu_btn.menu_t.mouseEnabled = false ;      menu_btn.menu_t.selectable  = false ;      menu_btn.linkTo = String (button.url );               
      menu_btn.x = 0 + i*150;       menu_btn.y = 0;          menu_btn.addEventListener (MouseEvent.CLICK,onClick);
      stage.addChild(menu_btn);
                
      i++;     }
}
function  onClick(e:MouseEvent){
                        var  link:URLRequest = new  URLRequest(e.target .linkTo);
        navigateToURL(link);
}
 
●参考キーワード:ググってみよう!
 
クラスとインスタンス、オブジェクト  
上記の仕組みでは、外部XMLファイル(menu.xml)におけるbutton要素を編集することで、メニューボタンの追加と削除、あるいは表示順の入れ替えなどをフレキシブルに行うことが出来る。
★本日の課題 
課題A 
出身都道府県、もしくは出身市区町村の地図を描きなさい。
そして、地図内に印をつけなさい。
その印にマウスカーソルをあわせることで、名所・旧跡、特産物、観光・レジャースポットなど、
注目すべきスポットの情報やイラストが表示されるというインタラクティブ・コンテンツを作成しなさい。
課題Aは「グループ課題」です。
※ いくつかの異なる出身地から選択する必要がある場合は、出身者数の多い地域にする。同数の場合は、話し合って決める。 
課題Aの締め切りは、次回(第4回)の授業開始前までです。
課題B 
今後、班ごとにWebサイトを作っていく予定。
今日は、サイトのホームページ(トップページ)に配置するメニューボタンを作成してください。
次回以降、いろいろなコンテンツを制作していきますが、メニューボタンを押すことで各コンテンツを閲覧できるようにする予定です。
したがって、今後フレキシブルにボタンの追加、編集ができるような設計にしてください。
本日示した例のように、ボタンを押した際に、新たなページを開くという方法ではなく、トップページに大きめのムービークリップを用意しておき、タイムライン制御を用いて各コンテンツ
間の移動を実現する方法を推奨する。
余裕のある班は、トップページに表示するグラフィックやアニメーションを作成してください。
課題Bは「グループ課題」です。
※課題Bの締め切りは、次々回(第5回)終了時までとします。 
本日の課題の進め方
 
本日はグループ課題が2つ出ています。あらかじめ役割分担について十分議論するように。
[Prev] 
[Home] 
[Next]