スコア加算と音楽制御

 自機(mc1)が敵(mc2)に当たった時,スコアを計算して表示し,音も出したい.
zu1  zu2

作り方

ヒント:自機mc1がスコアを持ち、txt1に表示する。敵(敵の弾)mc2が当たり判定し、スコア加算する。

1 構成要素の作成

 1)1つのダイナミックテキスト(txt1)を作る.
 2)2つの図形を描いて,それぞれムービークリップ(mc1, mc2)に変換しておく(形状メニュー>MovieClipへ変換).
 3)要素mc1が左から右に動くように,ActionScriptを書いておく.
on(load){ atai=100;}
on(enterFrame){
   this._x+=1;
   if(this._x>300){this._x=200;}
   _parent.txt1.text=atai;
}
ここで,動作確認,オブジェクト保存(全オブジェクトcopy, それから編集>ファイルへ添付).

2 当たり判定,スコア加算

1)要素mc2に下記のActionScriptを追加する
on(enterFrame){
   if( hittest(_parent.mc1) ){
         _parent.mc1.atai += -10;
   }
}
ここで,動作確認.

2)一回だけの判定
 このままだとmc1がmc2と接触している限り、得点が上がり続ける。それを避けて最初の一回だけ得点をつけたいので、mc2のActionScriptを次のように修正する。
on(load){ hit=0;}
on(enterFrame){
   if( hittest(_parent.mc1) ){
      if( hit==0 ){             //追加
         _parent.mc1.atai += -10;
         hit=1;               	//追加
      }               		//追加
   }
   else{ hit=0;}               	//追加
}
注)hitは接触しているかどうかの状態を表すために作ったユーザ変数。hitが0から1に変わるときだけスコアを加算する。
注)if文の条件判定には、両辺の比較 hit==0 のほかに、論理積「かつ」"&"や論理和「または」"|"や否定"!"が使える。
ここで,動作確認,オブジェクト保存.

3 MovieClip作成

 1)要素mc2のプロパティーウインドウにて「フレーム(frames)」タブをクリックして,フレーム作成画面にする.
 まずTweenを0にする.それから複数のキーフレームを追加し,要素mc2自身のムービーを作成する.
第1キーフレーム  第2キーフレーム  第3キーフレーム  第4キーフレーム
                       
 2)第2キーフレームのタイムラインの「アクションとサウンド」タブに「ムービー停止」を設定する.
 3)第3キーフレームのタイムラインの「アクションとサウンド」タブに「音楽再生」を設定する.
 4)「メインムービー」に戻る

 ここで,動作確認

4フレーム移動による音楽制御

要素mc2のアクションスクリプトに1行を追加する.
on(load){ hit=0;}
on(enterFrame){
   if( hittest(_parent.mc1) ){
      if( hit==0 ){
         _parent.mc1.atai += -10;
         hit=1;
	 gotoAndPlay(3);                //追加
      }
   }
   else{ hit=0;}
}
 ここで動作確認,オブジェクト保存

5 全体の書き出し,アップロード

 書き出し(ファイルメニュー>書き出し>HTML+SWF)

解説

1)要素mc2は3つのキーフレームをもつムービークリップであるが,全体(メインムービー)は,ただひとつのキーフレームから成るムービーである.
2)もっと細かい音楽制御の方法( サウンドオブジェクトsndを作成する
3)KoolMovesでなくEazyFlashで作成する時は,要素mc1のActionScript最終行を「_parent.txt1.text = atai;」ではなく,「_parent.txt1 = atai;」にしたほうが良い.オブジェクトtxt1の属性textに,変数ataiの値を代入するという意味である.
4)スコアが0になったとき,どうするか.いろいろある.
「ゲームオーバー」txt2を作成し,if(atai <= 0){_parent.txt2._visible=false;}
「ゲームオーバー」フレームを追加し,if(atai <= 0){_root.gotoAndPlay(2);}