【解決済み】rpg_core.js内の定数に変数を使う方法

返信する
アバター
ドラムカン
記事: 178
登録日時: 2019年11月04日(月) 23:02

【解決済み】rpg_core.js内の定数に変数を使う方法

投稿記事 by ドラムカン »

いつもお世話になります。

以下、カーソル速度変更のご質問から派生した問題となります。
viewtopic.php?f=23&t=12521

rpg_core.js内にあります下記の定数に
変数を使用すると、ゲーム起動時にType Error(WebAudio.initialize is not a function)となります。

コード: 全て選択

Input.keyRepeatWait = 24;
//エラー:Input.keyRepeatWait = $gameVariables.value(1);
//エラー:Input.keyRepeatWait = 24 - $gameVariables.value(1);

Input.keyRepeatInterval = 6;
//エラー:Input.keyRepeatInterval = $gameVariables.value(2);
//エラー:Input.keyRepeatInterval = 6 - $gameVariables.value(2);
はじめは、変数の中身が0だからエラーになるのかと思い、減算するようにしましたが、
要するに、$gameVariables.valueを定義しているのが、rpg_core.js自身なので
上記の定数読み込み時に$gameVariables.valueがまだ定義されておらず、エラーになるということでしょうか?

rpg_core.js内の定数は、他のプラグインから代入や加減算したいのですが
関数のように再定義することは可能なのでしょうか?

ご教示のほど、よろしくお願いいたします。
最後に編集したユーザー ドラムカン [ 2022年3月19日(土) 17:22 ], 累計 1 回
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: rpg_core.js内の定数に変数を使う方法

投稿記事 by ムノクラ »

ドラムカン さんが書きました:いつもお世話になります。

以下、カーソル速度変更のご質問から派生した問題となります。
viewtopic.php?f=23&t=12521

rpg_core.js内にあります下記の定数に
変数を使用すると、ゲーム起動時にType Error(WebAudio.initialize is not a function)となります。

コード: 全て選択

Input.keyRepeatWait = 24;
//エラー:Input.keyRepeatWait = $gameVariables.value(1);
//エラー:Input.keyRepeatWait = 24 - $gameVariables.value(1);

Input.keyRepeatInterval = 6;
//エラー:Input.keyRepeatInterval = $gameVariables.value(2);
//エラー:Input.keyRepeatInterval = 6 - $gameVariables.value(2);
はじめは、変数の中身が0だからエラーになるのかと思い、減算するようにしましたが、
要するに、$gameVariables.valueを定義しているのが、rpg_core.js自身なので
上記の定数読み込み時に$gameVariables.valueがまだ定義されておらず、エラーになるということでしょうか?

rpg_core.js内の定数は、他のプラグインから代入や加減算したいのですが
関数のように再定義することは可能なのでしょうか?

ご教示のほど、よろしくお願いいたします。
未実験で申し訳ないのですが…もしかして、コアを直接書き換えたり、プラグイン化しようと上記を実行していますか?

ゲーム変数は、ゲームがスタートしてデータを取得するもので、coreは起動時に動作するので、その時点ではゲーム変数の中身が無いと思います。

ゲームがスタートしてから、スクリプトで実行すれば変化すると思います。

下記辺りのプラグインで、ニューゲームやコンティニュー時に変数値の設定とスクリプトを実行するコモンイベントを入れれば実現すると思います。

▼割り込みコモンイベント(トリアコンタン様作) - CommonInterceptor.js
https://plugin-mz.fungamemake.com/archives/690
指定した時(・ニューゲーム時・ロード完了時・メニュー終了時)にコモンイベントを呼び出します。

再定義は可能ですが、どの箇所で判定するか次第だと思います。
コモンイベントの並列処理で、常に変数を代入するスクリプトを実行するのが簡単だとは思います。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
アバター
ドラムカン
記事: 178
登録日時: 2019年11月04日(月) 23:02

Re: rpg_core.js内の定数に変数を使う方法

投稿記事 by ドラムカン »

未実験で申し訳ないのですが…もしかして、コアを直接書き換えたり、プラグイン化しようと上記を実行していますか?
だとすると、エラーが出て当然です。

ゲーム変数は、ゲームがスタートしてデータを取得するもので、coreは起動時に動作するので、その時点ではゲーム変数の中身が無いと思います。

ゲームがスタートしてから、スクリプトで実行すれば変化すると思います。

下記辺りのプラグインで、ニューゲームやコンティニュー時に変数値の設定とスクリプトを実行するコモンイベントを入れれば実現すると思います。

▼割り込みコモンイベント(トリアコンタン様作) - CommonInterceptor.js
https://plugin-mz.fungamemake.com/archives/690
指定した時(・ニューゲーム時・ロード完了時・メニュー終了時)にコモンイベントを呼び出します。

なお、再定義はできないと予想します。
変更したい場合、変数の変更だけでなく、スクリプト実行が必要だと予想します。
ムノクラ様

早速のご回答、ありがとうございます。

やはりrpg_core.js内でゲーム内変数を使用することはできないのですね。
rpg_core.jsの定数が再定義できないということは、
Input.keyRepeatWaitや、Input.keyRepeatInterval の値は動的に変更できないということでしょうか?

よろしくお願いいたします。
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: rpg_core.js内の定数に変数を使う方法

投稿記事 by ムノクラ »

ドラムカン さんが書きました:
未実験で申し訳ないのですが…もしかして、コアを直接書き換えたり、プラグイン化しようと上記を実行していますか?
だとすると、エラーが出て当然です。

ゲーム変数は、ゲームがスタートしてデータを取得するもので、coreは起動時に動作するので、その時点ではゲーム変数の中身が無いと思います。

ゲームがスタートしてから、スクリプトで実行すれば変化すると思います。

下記辺りのプラグインで、ニューゲームやコンティニュー時に変数値の設定とスクリプトを実行するコモンイベントを入れれば実現すると思います。

▼割り込みコモンイベント(トリアコンタン様作) - CommonInterceptor.js
https://plugin-mz.fungamemake.com/archives/690
指定した時(・ニューゲーム時・ロード完了時・メニュー終了時)にコモンイベントを呼び出します。

なお、再定義はできないと予想します。
変更したい場合、変数の変更だけでなく、スクリプト実行が必要だと予想します。
ムノクラ様

早速のご回答、ありがとうございます。

やはりrpg_core.js内でゲーム内変数を使用することはできないのですね。
rpg_core.jsの定数が再定義できないということは、
Input.keyRepeatWaitや、Input.keyRepeatInterval の値は動的に変更できないということでしょうか?

よろしくお願いいたします。
簡単なプラグインを作りました。
CC0です。

マップで設定を変更し続ける並列処理と同じことをプラグインで行っています。
従って、戦闘中などに変数が変わっても反映されません。
添付ファイル
changeKeyRepea.js
(1.75 KiB) ダウンロード数: 6 回
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
アバター
ドラムカン
記事: 178
登録日時: 2019年11月04日(月) 23:02

Re: rpg_core.js内の定数に変数を使う方法

投稿記事 by ドラムカン »

ムノクラ さんが書きました:
ドラムカン さんが書きました:
未実験で申し訳ないのですが…もしかして、コアを直接書き換えたり、プラグイン化しようと上記を実行していますか?
だとすると、エラーが出て当然です。

ゲーム変数は、ゲームがスタートしてデータを取得するもので、coreは起動時に動作するので、その時点ではゲーム変数の中身が無いと思います。

ゲームがスタートしてから、スクリプトで実行すれば変化すると思います。

下記辺りのプラグインで、ニューゲームやコンティニュー時に変数値の設定とスクリプトを実行するコモンイベントを入れれば実現すると思います。

▼割り込みコモンイベント(トリアコンタン様作) - CommonInterceptor.js
https://plugin-mz.fungamemake.com/archives/690
指定した時(・ニューゲーム時・ロード完了時・メニュー終了時)にコモンイベントを呼び出します。

なお、再定義はできないと予想します。
変更したい場合、変数の変更だけでなく、スクリプト実行が必要だと予想します。
ムノクラ様

早速のご回答、ありがとうございます。

やはりrpg_core.js内でゲーム内変数を使用することはできないのですね。
rpg_core.jsの定数が再定義できないということは、
Input.keyRepeatWaitや、Input.keyRepeatInterval の値は動的に変更できないということでしょうか?

よろしくお願いいたします。
簡単なプラグインを作りました。
CC0です。

マップで設定を変更し続ける並列処理と同じことをプラグインで行っています。
従って、戦闘中などに変数が変わっても反映されません。

わざわざプラグインを作成くださり、ありがとうございます。

並列処理で随時、書き換えなければならないのですね。
つまり、rpg_core.jsはゲーム中にも常に読み込まれており、定数が定義され続けるため、
それを並列処理で無理やり書き換えていくという理解でよろしいでしょうか?

このプラグインを利用することで
ゲーム中にかかる負荷はどの程度のものになるでしょうか?
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: rpg_core.js内の定数に変数を使う方法

投稿記事 by ムノクラ »

ドラムカン さんが書きました: わざわざプラグインを作成くださり、ありがとうございます。

並列処理で随時、書き換えなければならないのですね。
つまり、rpg_core.jsはゲーム中にも常に読み込まれており、定数が定義され続けるため、
それを並列処理で無理やり書き換えていくという理解でよろしいでしょうか?

このプラグインを利用することで
ゲーム中にかかる負荷はどの程度のものになるでしょうか?
まず、自分の足りない理解ですが(これが以前に…まぁ忘れましょう)コアスクリプトとプラグインは、ゲーム起動時に読み込まれるはずです。
プラグインはコアスクリプトの関数を上書きし、ゲームが開始します。
以降、スクリプトを除いて、追加の読み込みがされるのは、ゲームデータだけです。

rpg_core.jsは最初に読み込まれ、その時点ではゲームデータが存在しないため、そこをゲームデータを読み込もうとしてもエラーになります。
そして、今回の箇所は、ゲーム内で変更する処理が無いため、固定になっています。
語弊があるかも知れませんが、値が固定化された変数値のようなものです。

この値を変更するにはスクリプトを実行するしかありません。
また、このスクリプトで変更した値は、おそらくセーブデータに反映されません。
(先のプラグインで変数値を使っているのは、セーブデータに保存するためでもあります)

次に負荷についてですが、今回のプラグインでも負荷はかなり低いと思います。
自分は負荷の測定方法が分からないので、ご自身で指標を決めて測定ください。

更に低くしたければ、実行回数を減らすのが定石でしょうから、必要な場面を厳選します。
必要になるシーンのupdateメソッドだけに絞れば、実行される範囲は減ります。

最も負荷が低いと予想されるのは、変数を変更する時に、スクリプトを入れたコモンイベントを一回だけ実行することでしょう。

以下、未実験です。

メニュー画面を開く時に更新されれば良いのであれば、
Scene_Menu.prototype.createCommandWindow
辺りにフックするのが良いでしょう。

戦闘中に変更するとなると、
Scene_Battle.prototype.update
にフックするか、バトルイベントで変数を変更する時にスクリプトを実行するのが良さそうです。

このような拙い説明で、伝わったでしょうか?
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
アバター
ドラムカン
記事: 178
登録日時: 2019年11月04日(月) 23:02

Re: rpg_core.js内の定数に変数を使う方法

投稿記事 by ドラムカン »

ムノクラ さんが書きました: まず、自分の足りない理解ですが(これが以前に…まぁ忘れましょう)コアスクリプトとプラグインは、ゲーム起動時に読み込まれるはずです。
プラグインはコアスクリプトの関数を上書きし、ゲームが開始します。
以降、スクリプトを除いて、追加の読み込みがされるのは、ゲームデータだけです。

rpg_core.jsは最初に読み込まれ、その時点ではゲームデータが存在しないため、そこをゲームデータを読み込もうとしてもエラーになります。
そして、今回の箇所は、ゲーム内で変更する処理が無いため、固定になっています。
語弊があるかも知れませんが、値が固定化された変数値のようなものです。

この値を変更するにはスクリプトを実行するしかありません。
また、このスクリプトで変更した値は、おそらくセーブデータに反映されません。
(先のプラグインで変数値を使っているのは、セーブデータに保存するためでもあります)

次に負荷についてですが、今回のプラグインでも負荷はかなり低いと思います。
自分は負荷の測定方法が分からないので、ご自身で指標を決めて測定ください。

更に低くしたければ、実行回数を減らすのが定石でしょうから、必要な場面を厳選します。
必要になるシーンのupdateメソッドだけに絞れば、実行される範囲は減ります。

最も負荷が低いと予想されるのは、変数を変更する時に、スクリプトを入れたコモンイベントを一回だけ実行することでしょう。

以下、未実験です。

メニュー画面を開く時に更新されれば良いのであれば、
Scene_Menu.prototype.createCommandWindow
辺りにフックするのが良いでしょう。

戦闘中に変更するとなると、
Scene_Battle.prototype.update
にフックするか、バトルイベントで変数を変更する時にスクリプトを実行するのが良さそうです。

このような拙い説明で、伝わったでしょうか?
詳しくご説明いただき、ありがとうございます。

おかげさまで、コアスクリプトの仕様や読み込み順序がよく分かりました。
いただいたプラグインを導入させていただいたところ、負荷も少なく軽快に動作しております。
この度は、誠にありがとうございました。
返信する

“MV:質問”に戻る