ページ 11

キーボード入力を検知するイベントでShiftを押していないと検知したりしなかったりする

Posted: 2023年1月01日(日) 19:51
by たくろう
あけましておめでとうございます!

「おすそわけプレイ」のようなサブでコントロール出来るキャラクターを作りたいと考えています。
  • メインプレイヤーは通常通り移動などできる
  • サブプレイヤーはキーボードのWASDで上左下右で移動できる
  • サブプレイヤーも前方を調べてアイテムを拾ったりできる(イベントを実行出来る)
上記内容を実装検討中なのですが、
2点質問です。

①キーボード入力を検知するイベントでShiftを押していないと必須で検知しない

※以下の検証は新規プロジェクトで実施しています、プラグインなどは追加していません
※環境:Windows 、RPGツクールMV1.6.3 、rpg_core.js v1.6.2

やったとこと記載します。
  • スマイル工房 ブログ室様(http://blog.livedoor.jp/trb_surasura/archives/13728522.html)を参考にさせていただき、Input.keyMapperにWASDを追加しました
  • マップ上に並列処理イベントを置き、イベント1のキャラクターを操作する下記のようなイベントを追加しました。

コード: 全て選択

◆条件分岐:スクリプト:Input.isPressed('skey')
  ◆スクリプト:console.log("ssssssss")
  ◆移動ルートの設定:EV001 (飛ばす, ウェイト)
  :        :◇移動速度:4
  :        :◇下に移動
  ◆イベント処理の中断
  ◆
:分岐終了
◆条件分岐:スクリプト:Input.isPressed('wkey')
  ◆スクリプト:console.log("wwwwwwww")
  ◆移動ルートの設定:EV001 (飛ばす, ウェイト)
  :        :◇移動速度:4
  :        :◇上に移動
  ◆イベント処理の中断
  ◆
:分岐終了
~同様にAとDも設定~
これによって「イベント1」自体は操作できそうなのですが、ボタンを押してもたまにしか動いてくれません。

▼発生している事象、確認したこと
  • 10回に1回くらいで移動する
  • console.log("ssssssss")なども移動した時以外は出力されないのでそもそも条件分岐にヒットしていないっぽい
  • ボタンを押したとき、rpg_core.js内のInput._onKeyDownでInput._currentState[buttonName]はTrueになっている(押下自体は実行されているっぽい)
  • Shiftを押しながらWASDキーを押すと必ず動いてくれる(Shift+sで必ず下に移動してくれる)
  • Optionで「常時ダッシュON」にしても関係ない
  • caps lockしても関係ない(そもそもキーコードで判定していて大文字小文字は区別していない認識)
こちらを「Shiftを押していなくても必ず動くようにしたい」のですが、修正箇所がわからず…
原因などがわかればご教示お願いできればと思います。


②そもそもサブキャラの操作方法について

上記の方法の前に、通常キャラクターを動かしている部分を参考にサブキャラクターを操作できないかと考えていました
 →$gamePlayer関連のmoveっぽい要素を複製すればいける?

ただそちらは難易度が高く諦めました…
今回のような通常キャラクターとは別のキャラクターを同時に操作する(おすそわけプレイのイメージ)方法やプラグインなどがもしあれば教えていただけると嬉しいです。

Re: キーボード入力を検知するイベントでShiftを押していないと検知したりしなかったりする

Posted: 2023年1月09日(月) 14:59
by 論理イヌ
こんにちは。

難しそうな問題ですね。
問題の再現ができるプロジェクトがあると、回答が付きやすい傾向があります。
もし回答がなかなかつかないようでしたらご検討ください。

さてご質問の件ですが、まずはどこで問題が発生しているのかの切り分けをする必要があります。

キーボード入力でイベントを動かすには、以下の操作を実施していると思います。
(1)並列処理で毎フレーム処理
(2)どのキーが押されたか判断
(3)移動ルートの設定でイベントを移動


(1)~(3)の、どこまで正しく動いていて、どこで問題が発生しているのかを確認していく必要があります。
直接の回答ではなくて申し訳ないですが、以下を試していただけますか?

(1)「並列処理で毎フレーム処理」が正しく動いているか確認する
→キー入力検知の並列処理を見直してみてください。
 キー入力の検知をしている並列処理はどのように組まれていますか?
 変なウェイトが挟まって、たとえば30フレームに1回のみ並列処理している……とかですと、キー入力が正しく検知できません。
 また、並列処理をしているマップイベントやコモンイベントが複数あるようでしたら、それらが悪さをしているかもしれません。

(2)「どのキーが押されたか判断」が正しく動いているか確認する
→WASD以外でのキーだと動作しますか?
 たとえば「Shiftキー」を入力したときにイベントを右移動、という処理は正しく動きますか?
 また、ツクールの「条件分岐」で選択できるキー(たとえば右キー)では正しく動きますか?

(3)「移動ルートの設定でイベントを移動」が正しく動いているか確認する
→たとえば、キー入力関係なく、ただの並列処理で「右に1移動」をし続けるとどうなりますか?
 ※疑似的に「Dキー押しっぱなし」を再現するテストです。
 処理が重くなったり、変な挙動(移動して停止を繰り返す等)をしていませんか?
 希望の動作をしていなかったら、移動ルートの設定を見直す必要があります。
 たとえば、移動ルートの設定「完了までウェイト」のチェックを外してみたり。

解決の手助けになればと思います。