スコア加算と音楽制御
自機(mc1)が敵(mc2)に当たった時,スコアを計算して表示し,音も出したい.
作り方
ヒント:自機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);}