● 『ステージ』のモデル化 ● |
- SHIORI -
では、『ゲーム全体』を『ステージ』の集合として考えると述べました。
ここでは、その『ステージ』について少し詳しく解説します。
- SHIORI - では、『ゲーム全体』の中の『ステージ』は、以下のような位置づけになっています。
『ゲーム全体』の構造における、ステージの位置づけ
上の図で示すように、ひとつひとつの『ステージ』を見ると、そこからは0本以上の矢印が延びており、その矢印は別の『ステージ』に繋がっています。
たとえば「ステージ1」であれば、無事クリアできて「ステージ2」につながる矢印と、ゲームオーバーになってしまって「GAME
OVER」に続く矢印を持っています。 - SHIORI -
では、このようにして、矢印で『ステージ』間の関連を決定してやることで、『ゲーム全体』の流れを定義します。
『ステージ』と矢印の関係
なお、このように『構成要素』と『構成要素』の関係を定義するための矢印を、-
SHIORI - では『リンク』と呼びます。
『リンク』という言葉を使うと、『「ステージ1」は「ステージ2」と「GAME
OVER」へのリンクを持っている』、という言い方になります。 また、「ステージ1」から「ステージ2」に状態遷移することを、『「ステージ1」から「ステージ2」にリンクする』、と言います。
このように『ステージ』をつなぎ合わせることによって、『ゲーム』を構成することができます。
では次に、この『ステージ』を構成するための構成要素である『オブジェクト』と『オブジェクト特性』について解説します。
『ステージ』に『オブジェクト』を出現させることができれば、それを集めて『ステージ』を構築でき、さらにその『ステージ』を集めれば、『ゲーム全体』を作ることができます。
● 『オブジェクト』のモデル化 ● |
上記の『ステージ』は、『オブジェクト』の集合として考えることができると述べました。
『オブジェクト』は - SHIORI -
における処理の最小単位であって、それ自体が画面上に表示され、動くものです。 逆に画面に表示されるものは、どのようなものであろうと、必ず『オブジェクト』であるとも言えます。
その『オブジェクト』が、画面上でどのように挙動するかは『オブジェクト特性』で定義します。
『オブジェクト特性』は『オブジェクト』の動き方を定義するもので、『オブジェクト』そのものを定義するものではありません。 あくまで、『オブジェクト』の設計図です。
ここでは、その『オブジェクト』と『オブジェクト特性』に関して解説します。
『オブジェクト特性』は、『オブジェクト』の設計図です。
『ステージ』の中で『オブジェクト』が出現するときには、まず『オブジェクト特性』が参照されます。
『オブジェクト特性』には、基本的に『オブジェクト』が画面上に出現してからの振る舞い方に関する情報や、出現するときの初期状態に関する情報が格納されています。
『オブジェクト』は、『オブジェクト特性』に記述された、『オブジェクト』の初期状態に関する情報に従って初期化され、画面上に登場します。 登場したあとは、『オブジェクト特性』で定義されたような動きに基づいて挙動します。
『オブジェクト』が画面上に出現するまでのプロセス
● 『オブジェクト』のモデル化 ● |
『オブジェクト』は、それぞれが以下に示すような情報を持っています。
オブジェクトが持つ属性(抜粋)
『オブジェクト』は、それぞれ自分の座標や、自分がこれから動くべき軌道に関する情報を持っており、それに従って『ステージ』内で勝手に行動します。
また、「入力情報を受けるか否か」といったようなスイッチが用意されており、もしこれがONになっている場合は、ジョイスティックからの入力に基づいて、なんらかの行動を起こすことができるようになります。
※移動パターンの定義と取り扱いについては、ちょっと複雑な内容になりますので、詳しいことは次の節で解説します。
ここではとりあえず、「動きの軌道に関する情報」程度として理解しておいてください。
上に示した属性は、『オブジェクト』が取り扱う全ての属性の中のごく一部で、『オブジェクト』は、実際にはもう少し沢山の情報を持っています。
ここで全ての属性を列挙することはできませんが、よく使うオブジェクトが持っている属性には、以下のようなものがあります。
カテゴリ | 属性 | 内容 |
全般 | 存在フラグ | キャラクタが存在しているか否か。 これがFALSEの場合は、『オブジェクト』は画面上に存在しないことになる。 |
座標 | 座標系の次数 | 座標を何次元で扱うか。 2Dシューティングなら2。 |
座標軸方向 | 取り扱う座標系に関する情報。 | |
座標値 | 座標値。 | |
カウンタ | フレームカウントの 有効/無効スイッチ |
1フレームあたり1カウントする、オブジェクトの内部カウンタを有効にするか否か。 |
出現してからの フレームカウント数 |
『オブジェクト』が画面上に登場してからのフレーム数。 | |
クリッピング | クリッピングエリア | 可動領域。 この領域を外れると、オブジェクトは自動的に消滅する。 |
当たり判定 | 当たり判定 使用可/不可スイッチ |
当たり判定を使用するか否か。 |
当たり判定領域 | 当たり判定の領域。 | |
当たり判定効果先 | 衝突が発生した場合に、ダメージを与える対象。 効果先として設定されていないオブジェクトと衝突しても、相手にダメージを与えることはない。 |
|
攻撃威力 | 『当たり判定効果先』として登録されている種類のオブジェクトと衝突が発生したときに、相手に与えるダメージ量。 | |
シールド量 | 自分のシールド量。 これが負の値になると、オブジェクトの消滅イベントが発生する。 |
|
入力情報 | 入力可/不可スイッチ | 入力デバイスからの入力を受け付けるか否か。 |
出現元情報 | オーナー情報 使用/不使用スイッチ |
未実装。現在機能しない。 |
パラメータ | パラメータ配列 | 『オブジェクト』の状態を管理するための各種パラメータ。 |
配列 | 移動ベクトル配列 | 『オブジェクト』の移動のしかたを定義するための配列。 ベクトルを要素に持つ。 |
描画ベクトル配列 | 『オブジェクト』の描画に関する情報を定義するための配列。 ベクトルを要素に持つ。 |
|
パラメータ配列 | 『オブジェクト』に定義された『パラメータ』の値を定義するための配列。 固定フォーマットのベクトルを要素に持つ。 |
|
配列ポインタ | 移動ベクトル配列ポインタ | 移動ベクトル配列上で、現在処理中の位置。 |
描画ベクトル配列ポインタ | 描画ベクトル配列上で、現在処理中の位置。 | |
パラメータ配列ポインタ | パラメータ配列上で、現在処理中の位置。 | |
コマンドセット | コマンドセットのリスト | コマンドセットの先頭ブロック名の配列。 |
スレイブ | スレイブオブジェクト | スレイブとして持つオブジェクト |
スレイブ間の、本体の 描画プライオリティ |
スレイブに対する本体の描画優先順位。 | |
自分がスレイブの場合、 マスターにとっての 自分のスロット番号 |
自分がスレイブオブジェクトである場合のみ有効。 親となるオブジェクトの、どのスロットに自分が組み込まれているか。 |
オブジェクトが持っている情報の一覧
これらの値を操作して、『オブジェクト』の状態を次々に変化させていくことにより、『ステージ』の中で『オブジェクト』を動かすことができます。
※コマンドセットについては、別途コマンドセットの章で解説します。
※開発にともなって、これから、上に挙げたものよりもさらに多くの情報を取り扱うようになっていくと思われます。
属性に関する最新の情報などについては、リファレンスなどをごらんください。(とはいえ、現時点では、まだリファレンスなど殆ど整備されてませんが。)
『オブジェクト』の状態を刻々と変化させていくことにより、『オブジェクト』を画面内で動き回らせることができるワケですが、どのように変化させるかについては、『オブジェクト特性』で定義します。
『オブジェクト特性』が定義する『オブジェクト』の「振る舞い」に関する情報としては、代表的なものとして、以下に挙げるような項目があります。
カテゴリ | 属性 | 内容 |
識別子 | 特性名 | 特性につける名前/識別子。 『オブジェクト』の出現を指示するときには、この識別子で、出現する『オブジェクト』の種類を特定する。 |
スイッチ | 入力受付スイッチ | 入力を受け付けるか否かのスイッチ。 これがTRUEだと、ジョイスティックからの入力を受け付けることができるようになる。 FALSEの場合は、入力を受け付けない。 |
クリッピング | クリッピングエリア | 『オブジェクト』が挙動可能な領域。 『オブジェクト』は、この領域を外れると消滅する。 |
当たり判定 | 当たり判定 使用可/不可スイッチ |
当たり判定処理を行うか否か。 |
当たり判定領域 | 当たり判定領域。 他の『オブジェクト』との接触判定に用いる判定領域。 |
|
シールド量 | シールド量の初期値。 これがマイナスの値になると、『破壊コマンドセット』が実行されるようになる。 |
|
配列 | 移動配列 | オブジェクトがどのように移動するかを定義した配列。 これについての詳細は後述する。 |
描画配列 | オブジェクトが画面上でどのように表示されるかを定義した配列。 これについての詳細は後述する。 |
|
配列ポインタ | 移動ポインタ | 現在、『オブジェクト』が『移動配列』上のどの位置を処理中かを示すポインタの数と初期位置。 これについての詳細は後述する。 |
描画ポインタ | 現在、『オブジェクト』が『描画配列』上のどの位置を処理中かを示すポインタの数と初期位置。 これについての詳細は後述する。 |
|
コマンドセット | コマンドセット | 毎フレーム実行されるコマンドセット。 |
破壊コマンドセット | シールド量が負のときに発動するコマンドセット。 |
『オブジェクト特性』が持つ代表的な属性
『ステージ』が『オブジェクト』が画面上に出現させるときには、以上のような情報を『オブジェクト特性』から取得し、その内容に従って『オブジェクト』を出現させます。
「振る舞い」に関する情報を得た『オブジェクト』は、それ以降、その情報に従って独自に判断し、行動するようになります。
「振る舞い」に関する情報の中には、『オブジェクト』が出現する際の初期状態も含まれており、『オブジェクト』はそれに従って初期化されます。
たとえば「当たり判定
使用可/不可スイッチ」などは、『オブジェクト』が登場する瞬間は『オブジェクト特性』に設定された値が使用されますが、それ以降は、自由なときに切り替えることができます。
自機が登場するときなどは、最初は無敵状態にしておいて、しばらくしてから当たり判定を有効にしたいものです。 そういった場合には、『オブジェクト特性』の当たり判定スイッチをOFFにしておいて、『オブジェクト』出現してしばらくしてから、『オブジェクト』の当たり判定使用スイッチ属性をONに切り替えるようにします。
● まとめ ● |
次の節で、『オブジェクト』の移動パターンの振る舞いなどについて、詳しく解説します。