今回はJavascriptを使ってオリジナルのボスを作るためのポイントを
配布されているサンプルプログラムを例にして見ていくことにしましょう。
ゲーム開始時にボスのパラメータを設定しましょう。
このパラメータはゲーム開始時に一度だけ呼び出される関数init()か、
関数userGameStartJS()内に記述しましょう
ボスの座標、ボスの状態を表す変数、ボスのHPを表す変数です。
サンプルボス1より
サンプルプログラムでは、ボスのx座標を表す変数をboss_xとし、y座標をboss_yとしています。
座標はブロック単位では無く、1ドット単位で指定します。
1ドット単位毎の座標についてはgetMyXReal()メソッドや、getMyYReal()メソッドで得られる値と同じです。
サンプルプログラムではboss_jyoutaiという変数で指定しています。
この値によってボスの状態が決まっているのかというとそうではありません。
例えばboss_jyoutai=50の時はボスが必ず死んだ状態を指定しているということではないということです。
この値は自分で勝手に決めることができ、ゲーム中の様々な状況を数字で示しただけのものです。
サンプルプログラムではboss_hpという変数で指定しています。
boss_hp_maxはボスの最大HPを決める変数としています。
ある状態になったときにHPの値を減らす処理を施し、この値を減らします。
この値が0になったからといってボスが死ぬわけではありません。
なぜかと言えば、boss_hpは単なる変数なので、実際にボスのHPを表している数字ではありません
なのでこれが負の値(-1とか-2)になろうがボス自体には何にも影響しません。
この変数がある条件を満たしたときの処理を施すことではじめて、この変数が役割を持つことになります。
オリジナルボスはグラーダやカイオールといったあらかじめ用意されているボスとは違い、
ボス戦になったときに自動的にスクロールロックをしてくれません。
そこでスクロールロックをするのに必要なメソッドが用意されています。
そのメソッドがsetScrollLock()メソッドです。
このメソッドは()内に指定の座標を記述しておくと、その座標が画面左端にきたときに
その座標からスクロールを行わないようにするメソッドです。
オリジナルボスには当たり判定というのはそもそも存在しません。
というのも、オリジナルボスは単純に画像を表示しただけのものなので、その画像には当たり判定などついているはずがありません。
画像に当たり判定をつけるには、正男の位置と最初に記述したボスの座標で決めなければなりません。
プレイヤーが正男を動かせば、まさおの現在位置を示す座標は変わります。
この座標を取得するにはgetMyXReal()メソッドやgetMyYReal()メソッドを使います。
まさおが指定の座標内に入ったときにsetMyMiss()メソッドでまさおを死亡させるか、
setMyHPDamage()メソッドでまさおにダメージを与えるかの処理を施してください。
まさおが指定の座標に入ったかどうかを判定するためにif文を使って条件を指定します。
例えば
if(Applet1.getMyXReal() > boss_x-32 && Applet1.getMyXReal() < boss_x+64) { if(Applet1.getMyYReal() > boss_y-32 && Applet1.getMyYReal() < boss_y+64) { // 主人公死亡 Applet1.setMyMiss(2); } }のように記述したとします。
オリジナルのボスを座標に配置し、ボスとまさおの当たり判定をつけるところまではできましたか?
次にファイアーボールやしっぽ攻撃の当たり判定を作ります。
この当たり判定はボスとまさおの当たり判定のようなif文によるものでは無く、メソッドで作成できます。
ファイアーボールはattackFire()メソッド、しっぽはattackTail()メソッドです。
この2つのメソッドの働きについては第4回のFXで追加されたメソッドを参照してください。こちら
座標と幅、高さを記述すれば、当たり判定の作成は完了です。
当たり判定を作ったとしても、当たった場合の処理を施さなければ全く意味がありません。
attackFire()メソッドやattackTail()メソッドは攻撃が当たった場合に数字の1を返します。
サンプルプログラムで「atari = attackFire(…);」と記述しているのは、
変数atariに1を代入するためです。
この変数を利用してさまざまな処理を施しましょう。
やっぱりまさおは敵を踏んで倒すのが一番。
と言うことでボスを踏む処理を記述しましょう。
この処理を記述する場所はボスとまさおの当たり判定のところです。
なぜそこに記述するのかと言うと、ボスを踏むということはボスに接触するということです。
でもこのままの状態では上から踏もうとしてもまさおが死んだり、ダメージを受けてしまいます。
そこで利用するメソッドがgetMyVY()メソッドです。
このメソッドはまさおのY方向の速度を取得するメソッドです。
この値が10より大きければ、まさおは落下している状態です。この状態でボスに接触したときには
まさおにダメージを与えず、ボスにダメージを与えるようにします。
ボスを踏んづけたということでsetMyPress()メソッドを使ってまさおに踏みつけアクションを実行させます。
またまさおの位置をsetMyYReal()メソッドを使って、少しずらしてあげましょう。
サンプルプログラムには潰れカウンターとしてboss_tcという変数を用意しています。
この潰れカウンターの値を利用することで潰れカウンターの値が一定数値を超えている場合は当たり判定を消すという
処理を施すことができます。実際には当たり判定を指定している条件文を読ませないようにします。
潰れカウンターが一定数値以上の時に他の画像を描画することもできます。このときに潰れたボスの画像を描画するのが普通です。
潰れカウンターの値を条件としてプログラムを記述しています。
潰れカウンターが0より大きい時の記述にはボスとまさおの当たり判定は存在しません。
0以下の時にはボスとまさおの当たり判定を作っています。
こうすることで踏んだ時に当たり判定内にまさおがいてもダメージを受けないようにすることができます。
潰れカウンターはinit()関数かuserGameStartJS()関数内に記述しておいてください。
オリジナルのボスを作る基本は以上です。
実際のところオリジナルボスは条件分岐と単純なメソッドだけで作ることができます。
ただし、オリジナルの攻撃を作ろうとすると、いろいろ考えなければなりません。
敵コードを呼び出す攻撃方法だけでも十分です。
自分で実際に弄ってボスを作ることでより理解が深まるはずです。