ページ 11

【解決済み】バトル画面におけるGame_Interpreter

Posted: 2016年9月08日(木) 23:58
by ONOZUKA
マップ画面などにおいてRGSS3からのGame_Interpreterの呼び込みは、
大抵うまくいくのですが、戦闘トループにおけるスクリプト呼び出しは、
(HPやステートの操作など)反映されないことがあります。
おそらく、戦闘シーンの定義が必要かと思うのですが方法がわかりません。
問題なく動かせるようにする方法があればよろしくお願いいたします。

Re: バトル画面におけるGame_Interpreter

Posted: 2016年9月13日(火) 09:14
by ONOZUKA
過去に試した際に、バトルでエネミーのHP減少をしたことをあるのですが、反映されず、
他に何か間違っていなかったかまで確認していなかったと思います。
閲覧されている方が疑問符がわいているもしくは起きないでしょ?っていう場合も
教えてくださると幸いです。あと数日たったら返答を締め切りたいとは考えてます。
個人的にはGame_Interpreterってマップ画面専用なのかなとか思ってます。

Re: バトル画面におけるGame_Interpreter

Posted: 2016年9月13日(火) 12:34
by SBR
メッセージボックスを表示してみてはいかがでしょうか?

msgbox 敵のHPなどの変数

実行するとメッセージボックスに対象の変数の値が表示されるはずです。表示されない場合はコマンドが呼び出されていません。

Re: バトル画面におけるGame_Interpreter

Posted: 2016年9月14日(水) 14:10
by seea
こんにちは。
Game_Interpreterはマップ上のイベントを定義・処理するためのクラスと
考えているので、バトル画面から呼び出すメソッドの置き場所としては
向いていないと思います。

呼び出しに失敗するとエラーになるはずですので、
そもそも処理を呼び出していないか、あるいは操作する変数を間違えたか、
操作は合っていたけれど既存の処理によって値が上書きされたか、です。

バトルでエネミーのHP減少を試されたことがあるとのことですが
調べて回答するには、具体的なコードを教えていただく必要がありそうです。
コードが分かると、スクリプトを書く人の誰かは気付くと思うので
何かしらの回答を得られそうです。

自力で調べる場合は、p を駆使してコンソールに情報を沢山出して
どの処理が動作して、変数の値が何から何に変化したのかを
追っていくのが良さそうです。大変そうでいて、実はそれが近道かと思います。

反映されないことがある、というのも少し引っ掛かります。
コードとして適切でない場合は、意図したとおりに動作しませんので
100%反映されないはずです。反映されることがある、というのは
タイミングによって発生したり発生しなかったり、
ということでしょうか?
とすると、不具合を抱えたままになっている可能性がありますので
原因を追求したほうが良いと思います。
放置するとなかなか直らないバグとして残っていってしまいます。

VXAceは不具合が発見され尽くして枯れた環境という事もあり
一通り対策すれば本体は安定して動作するゲームになります。
何とか解決していきたいものですね。

Re: バトル画面におけるGame_Interpreter

Posted: 2016年9月14日(水) 14:47
by faida
主題と少しずれた話になりますが、ご了承ください。
Game_Interpreterはバトル画面でも使われています。Game_TroopにGame_Interpreter.newとある通りですね。
(そうでないとマップイベントと同じコマンドがバトルイベントで使えませんしね)
基本的にどのイベントコマンドでも(キャラクター移動等は除く)マップと同じ挙動をしてくれます。

バトル画面を改造している場合では敵のHPが見えたりしますが、画像の更新タイミングはスクリプトによって異なり、
減ってはいるけど更新タイミングでないからHPが減っているのが見えない、なんてこともあるかもしれません。
デフォルトの味方ステータスウィンドウは事あるごとに更新してくれるので、そんなことはないとは思いますが。

まぁバトルイベントは発生条件があまり選べなかったり、タイミングが3種類あったりするので、
うっかり「モーメント」で固まらせるとか、「バトル」で一回しか発動しないとかよく起こるんですけどね。
何はともあれ、動作をよくチェックするのは大事です。p命令を使うのがいいかと思います。

Re: バトル画面におけるGame_Interpreter

Posted: 2016年9月14日(水) 21:39
by ONOZUKA
SBR様、seea様、faida様ご返信ありがとうございます。

msgboxというのはpでも代用が効きそうな気はするのですが、
そういったRubyの機構があるというのは初めて知りました。

イベントどうしの接触判定でもよく思っていたのですが、
仮に処理の一部分にコンソールへの表示用にpを用意して
その処理が適切に構成されているかを確認する場合でも、
そこからどのように組み立ててエラーを回避すべきかが
自分には敷居が高いので、プログラムの要所に
それらを配置して自分の入力、把握ミス等には役立てようと考えます。

Game_InterpreterがGame_Troopにもあったのですね。
更新タイミングと言われてとても分かりやすかったです。
つまり、戦闘処理の適切な部分に組み込まなければ
理想通りの処理にならないことがある、ということですよね。
バトルとターンの違いは判ったのでひとまず、
ターン処理に入れてコンソールチェックを行っていきますね。

お答えくださった方、熟慮してくださった方感謝です。
ひとまずこのトピックスを解決済みにしたいと思います。
改めてご相談させていただくこともあるかと思いますが、
その折には処理の詳細や、エラー状況、目的をより
明確にしてご質問させて頂こうかと思いました。