アイストマトバズーカのゲーム制作日記

いろいろ超初心者がゲーム制作に挑戦。現在RPGツクールMZでフリーゲーム制作中。フリー素材も作って置いてます。

MENU

【RPGツクールMZ】連続するキー入力の判定をしてみる① (゜-゜)

こんにちは。

 

RPGツクールMZでフリーゲームを制作中です。

 

作ろうとしているゲームのジャンルがアクションRPGであることを最近知りました。

 

いやまぁ、たぶんそうだろうってくらいにはわかっていたのですが 自信がありませんで(´ー`A;)

 

アクション要素はあるけどRPGっていうほど冒険する予定ないし、どうなんだろーと思って調べてみたらRPG部分が小規模だったり探索ADV的だったりしてもそれにアクションが加わっていればARPGだそうです。

 

暴露しちゃいますけどARPGのゲーム、遊んだことがないんですよ(`・ω・´)

 

でも大丈夫、RPGツクールでアクション要素盛り込めば自然とそれなりのアクションRPGになるでしょ、きっと。うん(;´∀`)

 

 

そんなわけで今回はアクション要素に必須のシステム、キー入力判定でちょっとしたことをやってみたので記事にしておきます。

 

やってみたのは同じキーを2回連続して入力されたことを判定する処理です。コマンド入力と似てますが1回キーを入力した後、一定時間内にもう一度同じキーが入力されたかどうかを判定します。”タタン”と入力したらOKで”タンタン”は×、間に違うキーを入れても×というふうにします。

 

(イベントコマンドの条件分岐で”ボタンがリピートされている”場合っていうのがありまして、たぶん同じようなことだと思うのですが長押しも判定される?など詳細な条件がイマイチわからないので自作したのです。なのでそのあたりに詳しい人にとっては無用な内容になっているかも知れません。)

 

これをどうするかといいますとプレイヤーが敵の攻撃を回避するために素早く移動するっていうアクションに使います。

 

もともとこのアクション自体は作ってありまして、武器を構えているときに方向キー+構え解除ってしていたのですが使いづらい気がしたので入力方法を変えることにしました。しかし使うキーは極力増やしたくないので方向キー2回入力という方法をチョイス。

 

処理の大まかな分類は

①キーが押された判定

②押したキーを放した判定

②時間計測

③決めた時間内に直近で放したキーと同じキーが押された判定

となります。

 

他にも方法はあるかも知れませんが一つの例として書きますね。コモンイベントの並列処理で作っていきます。

 

①キーが押された判定

方向キーのいずれかが押された場合を例にします。4方向のキーを1つずつ分岐条件にしますが通常コマンドで条件分岐を重ねていくと見にくくなるのでスクリプトを使って1文にしました。

スクリプト↓

Input.isPressed('up') || Input.isPressed('left') || Input.isPressed('right') || Input.isPressed('down')

これを分岐条件にすると"方向キーのいずれかが押された場合"になります。

 

①キーを放した判定

通常のイベントコマンドによる分岐条件には"キーが押されている"はありますが"放された”はありません(たぶん)。なのでスイッチを使ってこの判定処理を作ってやる必要があります。この処理は過去にも紹介したことがありました。


コマンド例↓

キーが押されたときにスイッチをON(例では32番のスイッチ)、 それ以外のときにさらに条件分岐でスイッチがONだった場合を作ります。これが即ち"同じキーを連続して入力したとき”になります。この条件を満たしたときは初期状態に戻るようスイッチを戻します。

 

②時間計測

計測用に別の並列処理コモンイベントを作成します。そのまえに計測イベントを発動させるためのスイッチを①の処理に加えます。

例で言うと33番のスイッチです。キーが放されたときにON、押されたときはOFFにしてます。それから時間をカウントするための変数を置いて初期値0としてます。

 

時間計測のコモンイベント↓

スイッチ(発動条件)をさっきの33番のスイッチにしてコマンドは変数の操作で”加算”、オペランドを定数"1"にします。

 

時間計測はこれだけ。これでキーを押してその後放したとき、計測用変数が1フレーム毎に1ずつ増えるようになります。

キーが押されたときに0を代入しているのでカウントは常に0からスタートになります。

 

③決めた時間内に直近で放したキーと同じキーが押された判定

まずは1回目のキー入力でどれが押されたかを記憶されるための処理を加えます。

各キーが押された場合に変数(例では20番)にテンキーの数字を割り当ててます。

スクリプトでなくてイベントコマンドの条件分岐でもいいんですけどね。elseif(それ以外のときの分岐)を使わずにすべてifにしてるのはなんとなくです。たぶん同時に条件を満たしたときの優先順位が上からか下からかの違いになるだけです。
この部分をイベントコマンドにするとこうです↓

イベント検索機能とか考えると全く同じ処理ならなるべくイベントコマンド使った方がいい気がする(=_=) まいっか。

 

先に述べた通り数字はテンキーの割り当て方にしています。ツクールMZではこの方式が使われているので統一しておきます。

割り当て方を書いた記事↓

 

次に2回目のキー入力について処理を加えていくのですが長くなってしまったので続きは次回の記事にします。すみません( ˘•ω•˘ )

 

らくがき。千里の道も大ラフから。

 (仕上げるとは言っていない)