キャラの作成と操作&メダルの作成と当たり判定を作る
PC(プレイヤーキャラ)を作る!
プレイヤーが操作するPC(このゲームではロボット)の作成について解説していく。
次のFla画面1は完成したPCクリップ内となる。タイムラインの構成としては、PCの状態ごとに3つに区分けてある。作成時、PCにはどんな状態が必要かを考え、タイムラインを区分けることによってコントロールしやすくしている。
また、操作ボタンとHP(耐久)バーもPCクリップ内に含ませた。
実際のflaファイルGameAct_04.fla(Flash CS3用のもの、またはFlash 8用のもの)を確認してほしい。
Fla画面1 PCクリップ内
(1)通常(走り)状態を作る
PCクリップの1フレーム目は、通常(走り)状態のフレームとなる。ここでの主なポイントとして、PCがダメージ中でもヤラレ状態でもない通常状態であることを示すのが大事となる。
PCの状態フラグの設定
前回紹介した「PCがダメージ状態か否か」フラグの値を0とし、通常(走り)時であると設定する。こういったPCの状態を示すフラグは、様々な状況(エネミー(敵)やトラップとの当たり判定、アイテムのゲット、何らかのイベント等々…)で使えるので、必ず用意しておいたほうが良いだろう。
../../:pc_dmg = 0;
「../」はパスを表し、一つ上の階層という意味。なので、この場合は二つ上の階層にある変数pc_dmgの値を0にする、となる。パスと階層の詳しくは、テクニカルノートの「パス」の項目を参照。
走りアニメを作る
このゲームでは、通常時、ロボットはずっと走っているので、ロボットの走りアニメを描いてクリップ化し配置している。
(2)ダメージ中状態を作る
PCがトラップと衝突した場合、ダメージ中フレームが再生される。その際、PCのHP(耐久)が無くなっていたらヤラレ(爆発)状態へ強制移行させている。
ちなみに、ダメージ中はPCの操作ができなくなる。これは、単純に操作ボタンを配置しないことによって実現したが、PCの状態フラグによって操作できなくすることも可能。
Fla画面3 PCクリップ内 ダメージ中状態
PCの状態フラグの設定 & ヤラレ(爆発)への移行
「PCがダメージ状態か否か」フラグの値を1にし、ダメージ中であると設定する[1]。
../../:pc_dmg = 1;
if (../../:pc_hp //PCのHP(耐久)が0以下ならヤラレ(爆発)へ移行させる
gotoAndPlay ("baku");
}
(3)ヤラレ(爆発)状態を作る
ヤラレ(爆発)状態。メカものらしく派手な爆発にしてある。当然、ヤラレ(爆発)時は操作できない。
Fla画面4 PCクリップ内 ヤラレ(爆発)状態
ゲームエンド画面への移行
フレーム最後、エンド画面へ移行する。
stop ();
tellTarget ("/") {
gotoAndPlay ("end");
}
PCの操作ボタンを作る!
ケータイFlashゲームでは、クライアントの要望として、1ボタンでの操作[2]を要望されることが多々ある。ゲームによっては複数ボタンの意義はあるが、今回のアクションゲームではシンプルに1ボタン(5キー)とした。
このゲームでは、PCが通常(走り)時のみ操作可能なので、ボタンは通常(走り)時のみ配置してある。
これに関しても、flaファイルGameAct_04.fla(Flash CS3用のもの、またはFlash 8用のもの)を確認してほしい。
Fla画面5 PCクリップ内 操作ボタン
on (keyPress "5") {
if (../../:pc_posi == 0) {
_y = 88;
../../:pc_posi = 1;
} else {
_y = 188;
../../:pc_posi = 0;
}
}
5キーが押されたら、PCの位置(上通路か下通路か)によってPCクリップの表示Y座標を変え(下なら上へ、上なら下へ移動)、PCの位置フラグの値も変えている
PCのHP(耐久)バーを作る!
HP(耐久)バーは、PCがトラップと衝突した際に減少する仕様になっている。HP(耐久)バークリップの作り方は、実物を見た方が分かり易いので、以降の解説と合わせて、flaファイルGameAct_04.fla(Flash CS3用のもの、またはFlash 8用のもの)をご覧頂きたい。
Fla画面6 HP(耐久)バークリップ内
HP(耐久)バーの作り方としては、HP(耐久)を表す青色のムービークリップを、PCのHP(耐久)状態分、X座標方向にずらしていく(はみ出す部分はマスクで隠している)。そうすると、下地の赤色面積が増えていき、どんどんダメージを受けているように見える仕組み。
bar1 = bar._xscale / ../../../:hp_max;
bar._x = (../../../:hp_max - ../../../:pc_hp) * bar1;
[1] ダメージ受けて減る1メモリを、HP(耐久)バーの長さ÷最大HP量で算出し、変数bar1に保持しておく
[2] HP(耐久)最大値-その時点でのHP(耐久)量したHP(耐久)残量をbar1と乗算し、その分HP(耐久)バークリップをX座標方向にずらす
メダルを作り、PCとの当たり判定を作る!
それでは次に、PCが触れることによってゲットできるメダルの作成へ移ることにする。このメダルは、1つで500点になる。
実際のflaファイルGameAct_05fla(Flash CS3用のもの、またはFlash 8用のもの)を確認してほしい。
Fla画面7 メダルクリップ内
Fla画面7はメダルクリップ内だが、構造は単純で、PCとメダルクリップとの当たり判定を行い、衝突したらメダルゲットへ移行する。3フレーム目のメダルゲットからタイムライン最後までの間は、このメダルクリップが画面外へ外れるまでの間である。画面外へ外れたらフレーム1へ戻して再びメダルをステージに配置している。
(1)スコアへの加算
ルートにあるスコア変数「Score」へ加算している。
/:Score += ../../:scr_medal;
(2)PCとメダルクリップとの当たり判定を作る
前回にも記したように、FlashLite1.1には、ムービークリップ同士の衝突判定を行える「hitTest関数」が無いため、それに代わる判定を何かの方法で行うしかない。そこで筆者は、ゲーム制作本来の方法である「座標範囲による判定」を行っている。
if (../../:pc_dmg == 0) {
if (_x - 32 = ../pc:_x) {
if (_y - 32 = ../pc:_y) {
gotoAndPlay ("get");
} else {
gotoAndPlay (1);
}
} else {
gotoAndPlay (1);
}
} else {
gotoAndPlay (1);
}
[1] PCがダメージ状態でなければ、PCとメダルクリップとの当たり判定を行う
[2] ここで、PCとメダルクリップとの座標範囲による当たり判定を行っている。詳しくは下記の図で解説
このように、クリップの基準点を中心とした座標範囲を当たり有効範囲と設定し、クリップ同士の当たり判定を行う。この方法なら、両者がどのように動いて衝突しても当たり判定が行える。ここでとても重要なのは、当たり有効範囲の調整である。
当たり有効範囲の重要性
例えば≪衝突例②≫≪衝突例⑤≫を見ると、PCとメダルクリップは接触しているが、これはメダルゲットとみなしていない。プレイした感触として確実にゲットしたと見えなければならないからだ。‥が、当たり有効範囲がシビアになればゲーム難易度は上がっていくので、有効範囲を甘くするか辛くするかのさじ加減はとても重要となる。これがトラップやエネミーとの当たり判定なら、もっと重大である。