掲示板とかでキー処理、というか格闘ゲームにおける「コマンド」の処理方法についての
話題があがったので、ちょっと取り上げてみます。しかも、「極み」のコーナーにしては
珍しく、ソースファイル&サンプルプログラムつきです(^^;)実行にはDelphiXというコンポーネント
が必要ですので、別途用意しておいてください。
使ってみれば分かってもらえると思うんですが、DirectInput、つまり入力系コンポーネントにはたいてい さて、その手順ですが、まずはコンポーネントから入力情報をゲットし、それを自分の使いやすい形式(Booleanなど)に変換します。 ここではBoolean型に変換したとして話を進めることにします。変換したものがTrueなら「ボタンが押されている」という フラグをTrueにセットし、Falseなら「ボタンが押されていない」というフラグをTrueにセットします。 なお、これらのフラグのセットは必ずコンポーネントから入力をゲットしたあとで行わなければなりません。
で、先ほどセットした「ボタンが押されている」フラグがTrueのとき、コンポーネントからゲットした入力情報で
ボタンが押されていないことが検出できたときが、「ボタンを離した瞬間」です。また、このとき「ボタンが押されている」
というフラグをFalseにセットします。 説明がへたくそなので、ソース見たほうが早いかも(^^;) コンボ処理についてはまた次回。
|
※コマンド 格闘ゲームとかでよくあるアレ。「波動拳」とか。
※DelphiX
※DirectInput
※フラグが立つ |
さて、コマンド処理についての下準備が整ったところで早速やってみますか。
実は先ほどの「ボタンが押された瞬間」などは「OnKeyDown」イベントハンドラやWinAPIを使うことによって
できることはできたんですが、ゲームに必須(?)の「ジョイスティック」に対応できないので
あえて上のような方法を取りました。実際僕も「OnKeyDown」を使って手抜きをしていたら
「ジョイスティックには対応してないの?」とユーザーさんから苦情がきて、「押された瞬間」などの
処理を実装するのにかなり悩んだクチなんです(^^;)
んじゃ、ぽくむら流コマンド処理の流れを説明していきます。
次に、この処理のメイン部分である「コマンドの判定」について書いてみます。
長くなってしまったので混乱してしまう人も多いと思いますが、そうなってしまった場合は 実際に自分でこのような処理を作ってみるといいと思います。論より証拠です。その過程でつまづいたときに、 このページをもう一度みて、「なるほど〜」とうなづいていただければ幸いです。 よくわからないところがあれば、メールや掲示板で質問してください。
|
※OnKeyDown DELPHIのコンポーネントのほとんどについている 「キーボードが押された瞬間」に発生するイベント。リアルタイムゲームではここでキー処理を行うゲームは少ない。
※イベント
※イベントハンドラ
※WinAPI
※バッファ
※アルゴリズム
※コマンドデータのバッファ
※ループ
※ごまかし |