RPGツクールMV ボタンを離す動作について...

キラッ

ユーザー
突然の質問で申し訳ありませんが、RPGツクールMVにてキャラが上下左右に動いている(ボタンが押されている)時はスクリプト「Input.isTriggered」を使い[SEの演奏]させているのですが、キャラが動きを止めた(ボタンから指を離された)時に[SEの停止]をさせるようにしたいのですが、やり方がよくわかりません。
[SEの停止]に限らず、ボタンから指を離された時に動作を加えるにはどのようにすればいいのでしょうか?教えていただければありがたいです、お願いします。
 
条件分岐の「ボタンが押されているかどうか」を使うのがいいかなと思いますが
スクリプトで、ということでしたら村人Aさんのサイトが参考になと思います。
http://rpgmaker-script-wiki.xyz/mousekeyevent_kowazamv.php

ボタンを押していることを条件にするのではなく、動いているかどうかを条件にするなら
「歩数」を並列で取得して増えたら音を鳴らす、増えなかったら停止するとかでもいいかもしれないけど音の長さによるかなあ。
 

WTR

ユーザー
イベントコマンドの "押されているか"を使って判定すると
一度も押されていない状態も真になってしまうので、ボタンを "離したこと" を正しく検出するには一工夫必要かもしれません。

Input._currentState['key'] でkeyの入力状態を判定できたはず。
押されていればtrue, 離されていればfalse

Input._currentState['key'] == true になったことを検知してから
Input._currentState['key'] == false になった瞬間をトリガにすればできませんかね。

Input.isTriggered('key') == true のあと
Input.isPressed('key') == false でも同じかもしれない。
 

WTR

ユーザー
あと、key入力を判定するのではなく、キャラが移動中であることを直接判定する方法も。
this.character(-1).isMoving()

でプレイヤーが移動中であるかどうかが判ります。
 

WTR

ユーザー
違った…
止まっていることを判定したいのだから
this.character(-1).isStopping()

でした。
 

ガバチョ

ユーザー
こんばんは。

WTRさんの書き込みでisStopping()を初めて知ったので試してみました。

キャラクタを一方向に移動させ続けている時、
見た目的に「オレは誰にも止められないぜ!」感があるのですが、
内部的にはisStopping()の状態が発生しているようです。
「1マス移動開始→完了(stop)」という1セットの処理を連続しているのかなと思います。
ですので並列処理で判定する時は工夫が必要かもしれません。
工夫の方法は思い付きませんでした(笑)

とりあえず添付画像のような並列処理を置くと、
移動開始時にベルが鳴って、ボタンを離した時に猫が鳴くようになりました。

button_hanashi.PNG

■補足
・1、2個目の条件か移動判定です。
 移動した時、スイッチをONにします。
・3個目以降の条件がボタン離し判定です。
 スイッチがONになっているのに、
 上下左右ボタンが押されていないということは、
 ボタンを離したのだろう。
 という流れです。

※最初のスイッチオンの条件を作り込まないと、
 いらないところで猫が鳴くおそれがあるので要注意です。

こんな感じでボタンごとにスイッチと判定を増やしていくと
いろいろできると思います。

他にもやり方があると思います。
ゆわかさん、WTRさんの方法も含めて、
いろいろ試して組み合わせてみると幅が広がりそうです。
 

キラッ

ユーザー
なるほど!そのようなスクリプトもあるんですね。
とても勉強になりました、いろいろと試してみますね~
ありがとうございます。^^/
 

seisirou

ユーザー
コモンイベントを2つ作ります。

1つ目
トリガー:並列処理
スイッチ:任意
◆条件分岐:ボタン[下]が押されている
◆変数の操作:#0000 キー入力 = 1

:それ以外のとき
◆条件分岐:ボタン[左]が押されている
◆変数の操作:#0000 キー入力 = 2

:それ以外のとき
◆条件分岐:ボタン[右]が押されている
◆変数の操作:#0000 キー入力 = 3

:それ以外のとき
◆条件分岐:ボタン[上]が押されている
◆変数の操作:#0000 キー入力 = 4

:それ以外のとき
◆変数の操作:#0000 キー入力 = 0

:分岐終了

:分岐終了

:分岐終了

:分岐終了

キーの操作を変数に代入します。
変数「キー入力」が0の時は方向キーが押されてないということです。



2つ目
トリガー:並列処理
スイッチ:任意
◆条件分岐:キー入力 = 1
◆ラベルジャンプ:1番

:分岐終了
◆条件分岐:キー入力 = 2
◆ラベルジャンプ:1番

:分岐終了
◆条件分岐:キー入力 = 3
◆ラベルジャンプ:1番

:分岐終了
◆条件分岐:キー入力 = 4
◆ラベルジャンプ:1番

:分岐終了
◆条件分岐:キー入力 = 0
◆注釈:方向キーが押されてない時
◆ラベルジャンプ:2番

:分岐終了
◆条件分岐:ONにしないスイッチがON
◆ラベル:1番
◆SEの演奏:任意 (任意, 任意, 任意)

:分岐終了
◆条件分岐:ONにしないスイッチがON
◆ラベル:2番
◆SEの停止

:分岐終了


結構雑ですが、これで方向キーが押されている間、SEがなるかと思われます。
いろいろ応用してやってみてください^^
 

seisirou

ユーザー
あれ…

文章書いてる間にすでに回答が上がってたようです。
失礼しました。
 

WTR

ユーザー
isStopping() と !isMoving() は等価じゃないんですね、知らなかったw

なんでどっちもあるんだろうなーと思ってはいたんですが理由があるんですね。
適当ですみません。。
 
トップ