はじめまして、こんにちは。ツクールMZで初めてのゲーム作りに挑戦しています。
その中で、バトル中のミニゲームとして
5秒以内に10回(もしくは5回)以上、決定ボタンを押せなければ装備(の一部)を剝がされる
というものを作成したいと思っています。
そこで、
https://tm.yumineko.com/viewtopic.php?t=727
https://tm.yumineko.com/viewtopic.php?t=10356
などのご質問を参考に添付のようなバトルイベントを作成しました。
(参考に全文を載せますが、重要なのは17行目までだと思います。
16~17行目はデバッグ用の記述で、実装時は削除します。)
一応ちゃんと動いてはいる……のですが、決定ボタンを1回押すたびに
ゲーム内では8333回~8334回の入力処理が行われるようで、
ボタンを1回押すと8334、2回押すと16667、3回押すと25000……と
変数[7]が処理されてしまいます。
装備を剝がされる条件分岐を 変数[7 ]≧ 8333 * 10 などとすれば大きな問題は
ないのですが、やはり気持ち悪いので可能なら直したいです。
よろしければ、ご助言いただけますでしょうか。
ツクールのバージョンは MZ 1.4.4 です。
どうぞよろしくお願いいたします。
【解決済み】ボタン連打の処理が上手くいかない
Re: ボタン連打の処理が上手くいかない
スクショの範囲だとこれで動く方が驚きですね…
ループ中に入力更新処理とタイマー更新処理が含まれていないです。
毎フレームInputとTimerは更新する必要があり正しく更新されなければ正常動作する事はありません。
一度ループに入ってからタイマーが動く事はないので無限ループに陥るはずなんですが、
ここに書かれていない何らかの要因が働いてるのでしょうか?
一応フリーズチェッカーに引っ掛かるはずなので完全な無限ではないですけど
必ず:以上繰り返しの上に◆ウェイト:1フレームを入れてメインループに処理を返す必要があると思いますよ。
これで上記の「毎フレームInputとTimerは更新する」事に繋がります。
あとはBattleManager.abortの処理を消してるのはタイムリミットに拠る戦闘中断対策ですか?
これはツクール2000時代から、
もっと言えば参考にしたであろうFF5にもある謎仕様なんですけど
ここまでしてタイマーを使うくらいなら変数でカウントした方が良いと思いますね。
ウェイト1を入れた状態なら1ループ1/60秒掛かるので
5秒分の入力猶予を作るなら300回回ったらループから抜けるように組み直した方が良いです。
ループ中に入力更新処理とタイマー更新処理が含まれていないです。
毎フレームInputとTimerは更新する必要があり正しく更新されなければ正常動作する事はありません。
一度ループに入ってからタイマーが動く事はないので無限ループに陥るはずなんですが、
ここに書かれていない何らかの要因が働いてるのでしょうか?
一応フリーズチェッカーに引っ掛かるはずなので完全な無限ではないですけど
必ず:以上繰り返しの上に◆ウェイト:1フレームを入れてメインループに処理を返す必要があると思いますよ。
これで上記の「毎フレームInputとTimerは更新する」事に繋がります。
あとはBattleManager.abortの処理を消してるのはタイムリミットに拠る戦闘中断対策ですか?
これはツクール2000時代から、
もっと言えば参考にしたであろうFF5にもある謎仕様なんですけど
ここまでしてタイマーを使うくらいなら変数でカウントした方が良いと思いますね。
ウェイト1を入れた状態なら1ループ1/60秒掛かるので
5秒分の入力猶予を作るなら300回回ったらループから抜けるように組み直した方が良いです。
Re: ボタン連打の処理が上手くいかない
名無し蛙さま
こんばんは、アドバイスありがとうございます!
:以上繰り返しの上に◆ウェイト:1フレームの処理を追加したところ、1回ボタン押下で入力処理も1回と想定通りの挙動になりました。
課題は多いようですが、ひとまずは解決しましたので、まずお礼申し上げます。
つまり、1フレームで8333~8334ループして入力処理が発生していたということなんでしょうかね?
ツクールを触り始めて1か月経たずの素人でして、見当違いのことを言っていたらお恥ずかしい限りですが。
このイベントが動くこと自体おかしいので他の要因が働いているかもとのことで、試しに新規プロジェクトを
立ち上げてゴブリンを配置、同様のイベントを走らせてみましたが……動いてしまいました。
とにかく動くからヨシ!ではないですが、ちょっと私の知識が足りないようですので、もう少し勉強してから
改めてよく考えてみます。
BattleManager.abortの処理はおっしゃるとおり中断対策です。以下の質問を参考にさせていただきました。
viewtopic.php?t=808
ご回答されている方も「かなり特殊なやり方」とおっしゃっているので、できれば避けたいですね。
確かに、ウェイト1フレームを入れて300回ループとすれば実質5秒のタイマーになりますね。参考になります!
ただ、できれば画面上に残り時間を表示したいので、その処理が少し面倒になりますね。
残り時間表示の面倒くささを考慮してもおっしゃるとおりウェイト1フレーム300回転方式のほうが
よさそうですので、怪しい処理はやめて思い切って組みなおしてみます。
上記のとおりひとまずは解決しましたので、【解決済み】とさせていただきます。ありがとうございました!
こんばんは、アドバイスありがとうございます!
:以上繰り返しの上に◆ウェイト:1フレームの処理を追加したところ、1回ボタン押下で入力処理も1回と想定通りの挙動になりました。
課題は多いようですが、ひとまずは解決しましたので、まずお礼申し上げます。
つまり、1フレームで8333~8334ループして入力処理が発生していたということなんでしょうかね?
ツクールを触り始めて1か月経たずの素人でして、見当違いのことを言っていたらお恥ずかしい限りですが。
このイベントが動くこと自体おかしいので他の要因が働いているかもとのことで、試しに新規プロジェクトを
立ち上げてゴブリンを配置、同様のイベントを走らせてみましたが……動いてしまいました。
とにかく動くからヨシ!ではないですが、ちょっと私の知識が足りないようですので、もう少し勉強してから
改めてよく考えてみます。
BattleManager.abortの処理はおっしゃるとおり中断対策です。以下の質問を参考にさせていただきました。
viewtopic.php?t=808
ご回答されている方も「かなり特殊なやり方」とおっしゃっているので、できれば避けたいですね。
確かに、ウェイト1フレームを入れて300回ループとすれば実質5秒のタイマーになりますね。参考になります!
ただ、できれば画面上に残り時間を表示したいので、その処理が少し面倒になりますね。
残り時間表示の面倒くささを考慮してもおっしゃるとおりウェイト1フレーム300回転方式のほうが
よさそうですので、怪しい処理はやめて思い切って組みなおしてみます。
上記のとおりひとまずは解決しましたので、【解決済み】とさせていただきます。ありがとうございました!