縦スクロールシューティング21

敵に動作を付ける/クリックチーム動作コントローラ

前回に引き続きアクティブオブジェクト(スプライト)に「クリックチーム動作コントローラー」を使って動作を付ける方法を考えていきます。「動作コントローラー」へはアクティブオブジェクトのプロパティ「アクティブタブ」からアクセスします。「クリックチーム動作コントローラー」はエクステンションでもあります。だからアクティブオブジェクトのプロパティからアクセスもできるし、イベント中にエクステンションを経由して設定を動的に変更も出来ます。

コウモリの動作に「正弦波(Sinewave)」を当てはめたSWFによるエクスポート例。


お次は円動作。どちらも設定を弄るだけで実現できます。

「クリックチーム動作コントローラー」の円動作に、Y軸の移動を加えたもの。

この通り利点としてはパラメーターを入力するだけで基本動作は完成します。そしてパラメーターを弄るだけでいろんな動作を作ることができます。しかし「クリックチーム動作コントローラー」を利用した場合、正確な衝突判定を作ろうとするとどれくらいの移動量を与えられているか普段から意識しないのでトラブルの原因に製作者が気がつかない可能性があります。元々計算で軌道を求めることができる人は動作原理が分かっているのでパラメーターを弄る場合もこの数値を弄ればどうなるかなど理解が速いです。しかし計算が自力でできない人の場合、「動作コントローラー」がなぜこの数値を弄ればこうなるかが理解できなくても経験上や試行錯誤でどう動くかをなんとなく知ることはできます。それで良いかどうかはともかくとして、とりあえず動くものを作ることができるのが「クリックチーム動作コントローラー」の強み。そして自力で計算して求めることができる人に取っては、ほとんど試行錯誤も計算も無しで動作を当てはめることができる便利な標準動作ということになります。

しかし標準動作ならヘルプも付いてるはずなのですが、このヘルプを日本語で読んだ覚えも無かったからWikiの「ヘルプ日本語訳」から該当項目を探してみたのですが見つかりませんでした。どうやら自分の環境で調べてみたら日本語版ユーザーにはヘルプファイルが付属しないので、動作コントローラーのヘルプもご丁寧に削除してくれたやつがいるようです。英語版MMF2を持ってないユーザーの方は動作コントローラーのヘルプを「MMF2アップローダ」のここからダウンロードできます。たぶん日本語版もサンプルフォルダは削除されてないと思うので、「Examples\Clickteam Movements」に動作サンプルが入っています。「In And Out Controler」はR251で追加された動作なので従来のヘルプファイルとは別ファイルになってます。

上のものはクリックチームが付けてくれたサンプルをSWFでビルドしてみました。アイデア次第でいろんな動作を作ることができるので簡単なパーティクル表現にも使えるし、シューティングの弾、もちろん自機の操作など応用幅は広いです。例えばMMF2製のゲームだと最近更新された「STORM GEAR」というシューティングゲームも自機の動作は自作ですが、敵弾幕や敵オブジェクトの動作などに「ベクター」や「バウンスボール」といった動作コントローラー系の動作が活躍してます。STORM GEARは豊富な敵と弾幕が売りの完成度(そして難易度も)高い全1面の縦スクロールシューティングゲーム。皆さんもぜひ遊んでみてください。

ただし例えば「ピンボール動作」などは上の動作サンプルを見ていても分かりますがオブジェクトのスリ抜けが頻繁に発生するのでいつの間にかボールが減っていく現象がすでにみられます。「クリックチーム動作コントローラ」には正確なコリジョンなどいまいち動作に信頼がおけないところがあるのが残念なところ。

そしてエクステンションとして追加する「クリックチーム動作コントローラ」にも最近バグが確認されています。このバグはMMF2初心者だと絶対理解できないので、ここではある程度MMF2を理解している人向けの説明になりますが、まずオブジェクトには固定値があります。そして「クリックチーム動作コントローラ」にコントロール対象としたいオブジェクトの固定値を渡す際に特定の条件でバグが発生します。具体的には固定値が「signed long int」の表現できる上限値に達した場合に発生するバグです。

「クリックチーム動作コントローラ」のバグ

実際のゲーム製作だとどんな状況で起こるバグかというと、例えば弾幕シューティングとかで弾を作りまくると普通ありえないんだけど「signed long int」の上限である+2147483647を固定値で一旦使いきってしまうことがあります。固定値は+2147483647を超えると次は-2147483647から始まり0へという動作なんですが、このマイナスの値を「クリックチーム動作コントローラ」は想定してないようで、マイナスの固定値を指定しても値を無視しています。実際に動作コントローラがゲーム途中から外れてしまった場合の動作はこんな感じ(公開されている「STORM GEAR」ではすでにバグは回避処理されています)。固定値がマイナスになった時点から自機の発射する弾などは一部正常に動作しなくなっているのが確認できます(弾が真横に飛ぶ)。動画では画面左下に赤文字でデバッグ用に表示してあるのがオブジェクトの固定値です。固定値がマイナスになった瞬間に注目。そして固定値は一度割り当てによって使用された値であっても、このようにぐるっと最大値~最小値を一巡した場合、再度同じ値が他のスプライトに割り当てられる可能性があります。それが問題でトラブルを起こすことは考えにくいけど、動作コントローラがマイナスの値を指定されても無視するのは動作コントローラ側のバグです。

記事作成協力:ASD「STORM GEAR」