キーコンフィグの作り方のヒントのみ。
前回のマキシマム・ツー記事にてCF2.5でのキーコンフィグの組み方のヒントを
解説出来なかったので、今回改めて取り上げてみる。
何故正解ではなくヒントなのかと言うと、組み方そのものは自分で考えないと
身に着かない、構造を理解したうえで会得していって欲しいなぁと・・・。
私も特に手練れているわけでもないのですが、まあ気にせずに。
先ず、キーコンフィグを組むのに必要なエクステンションがあります。
ひとつはパッドの入力を検出できるjoystick2オブジェクト、
もうひとつは文字列を編集できるstring parser2です。
ストリング系は他に使いやすいものがあるのならばparser2以外のものでも
構わないと思います。あとは設定を保存するのにiniオブジェクトが必要ですね。
※ボタン設定の情報をボタンの数分のグローバル変数を使用して読み書きすると言う手もある、
その場合はストリングは不要。
string parser2は確か以前も軽く解説していたと思うので説明省きますが
基本的に毎回『set source string』を指定しなおしていけば大丈夫です。
監視用に文字列オブジェクトを配置して、常にグローバル文字列などの
ターゲッティングしているストリングをそこの可変文字列に入れておくといいです。
で、joystick2ですが、同じボタン入力系でも命令が複数あって分りづらいです。
私もあまり違いを理解していないのですが、とりあえず『Button is Pressed』と
『Repeat While Pressed』の2つを覚えておけばなんとかなると思います。
前者が『次の操作をしたとき:ボタンNを押す』で後者が
『次の操作を繰り返す:ボタンNを押す』に相当します。
但し気をつけなければならないのが、MMF2/CF2.5の入力検出は実はとても賢くて
『次の操作をしたとき:ボタンNを押す』はきちんと1回ごとに検出しています。
(本体内蔵の機能なので当たり前だけど)
ところがエクステンションでの入力はタイトで入力終了はディレイです。
どういうことかと言うと入力時=ボタンを押したときの判定は瞬時に行われ、
入力終了時=ボタンを離したときの判定には若干遅れがあるのです。
なので、あるオブジェクトの変数Aをボタンを押したときに1に変更し、
変数Aが1のときにもう一度ボタンを押したら0にする・・・と言うイベントは
CF2.5の標準の命令『次の操作をしたとき:ボタンNを押す』を使って組んだときは
正常に機能しますが、同じイベントをjoystick2オブジェクトの
『Button is Pressed』に置き換えた場合機能しません。
処理が連続し押した瞬間に1になり0になるので結果何も起きないのです。
これはxboxゲームパッドオブジェクトでも同様で、単純に押したか押していないかを
判定するだけならさして不都合はないかもしれませんが、正確な入力を判定したい場合は
ボタンを押している間何かのオブジェクトの変数を増加させ、
ボタンを押していないときに変数が0より上のときは0に変更する・・・このように組んで、
その変数が1以上であれば入力、0ならば入力なしと、入力検出を自前で組んでしまえば
問題ないです。
joystick2オブジェクトにもxboxゲームパッドオブジェクトにも、変数が与えられるので
私の場合はここにゲーム中に使用する全てのボタンの入力の有り無しを
Aは上、Bは下、Cは左、Dは右、Eはボタン1、Fはボタン2、Gはボタン3、Hはボタン4・・・
のように割り振って判定する方式を使いました。
それぞれの変数が1以上ならばそれらのボタンが押されている、0ならば押されていない、
と言うことです。
オブジェクトの変数Aをボタンを押したときに1に変更し、
変数Aが1のときにもう一度ボタンを押したら0にする
このイベントであれば『次の操作をしたとき:ボタンNを押す』を
「joystick2オブジェクトの変数Eが1のとき」・・・に単純に置き換えることが出来ます。
ちなみに『次の操作を繰り返す:ボタンNを押す』ならば「変数Eが1以上のとき」のように
指定します。
ここまで出来たならばあとは簡単だと思います。プレイヤーが押したパッドのボタンは
何番だったのかを『Last Single Button Pressed』で拾ってグローバル文字列などに
順番に取っていって、それをiniに保存すれば良いのです。
※各ボタンの入力判定を行う変数一つ一つに対となる別の変数を用意して、
その対となる変数にフレーム開始時に設定情報を読み込ませる仕組みを作る必要がある。
対となる変数に読み込んだ番号のボタンを押したときに変数Aを加算する・・・様な仕組みで。
かなりざっくりと説明しましたが、この説明で理解出来るくらいの習熟度がないと
キーコンフィグをいきなり組むのは無理だと思うので、まあこんなものではないかと。
簡単と言えば簡単なのですがエクステンションの命令は基本英語なので初心者には
少しハードルが高いです。
自分で一つ一つのコマンドを試して解析するくらいの覚悟がないとなかなか難しいでしょうね。
まあそんな感じです。ではまた次回。