お世話になっております。
イベントエディタのスクリプトから変数の操作を行う際に「$gameVariables.setValue(a,b)」を使用するのですが、
文字数が長く見栄えが悪いので「sVal(a,b)」といった具合に、文字数が短く機能が同じ関数を作りたいと思っています。
また、「$gameMessage.add(a);if(b)$gameMessage.setFaceImage(b, 0);」といったスクリプトの組み合わせを、
纏めて「Mes(a,b)」といった文字数が短い1つの関数にしたいと思っています。
こういった場合、どのようにプラグインを書けばいいのでしょうか?
(解決)$gameVariables.setValue(a,b)の短縮
(解決)$gameVariables.setValue(a,b)の短縮
最後に編集したユーザー hadhad [ 2016年10月20日(木) 19:31 ], 累計 2 回
Re: $gameVariables.setValue(a,b)の短縮
どうもお疲れ様です。
そこまで分かるのならあとはGame_Interpreterに増設するだけ、なんですが
どうせならプラグインコマンド化する事をオススメします。
イベントコマンド>スクリプトは柔軟に対応出来る反面、重い処理なので頻繁に使うものではないです。
プラグインコマンド化して呼び出した方がいくらか負荷を軽減出来ます。
一応これでイベントコマンド>プラグインコマンドの方で
Mes HelloWorld
等と書けば動くと思います。()や,は不要で区切りは半角スペースです。
そこまで分かるのならあとはGame_Interpreterに増設するだけ、なんですが
どうせならプラグインコマンド化する事をオススメします。
イベントコマンド>スクリプトは柔軟に対応出来る反面、重い処理なので頻繁に使うものではないです。
プラグインコマンド化して呼び出した方がいくらか負荷を軽減出来ます。
コード: 全て選択
(function() {
'use strict'
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
switch(command) {
case 'sVal':
var a = Number(args[0]);
var b = Number(args[1]);
$gameVariables.setValue(a, b);
break;
case 'Mes':
var a = String(args[0]);
var b = args[1] ? String(args[1]) : null;
$gameMessage.add(a);
if (b) $gameMessage.setFaceImage(b, 0);
break;
}
};
}());
Mes HelloWorld
等と書けば動くと思います。()や,は不要で区切りは半角スペースです。
Re: $gameVariables.setValue(a,b)の短縮
早速のご回答ありがとうございます。
その方法は知っていたのですが、プラグインコマンドの場合は「値を返す」という事をする場合が面倒ですので、
あえてスクリプトで使う関数を追加したいと思っていました。
例えば、「console.log(sVal(a,b));」とした時に、コンソールに変更前と変更後の値の違いを文字列で出力されたり、
「console.log(Mes(a,b));」とした時に、コンソールに文字数を数えて返すなどと言った処理を加えたいのです。
また、試験的な処理を書く際にスクリプト機能を多用するため、
◆プラグインコマンド: Mes a b c(文字数を代入する変数ID)
◆スクリプト: var c = ???; console.log($gameVariables.value(c));
のみたいにするよりも
◆スクリプト: console.log(Mes(a,b));
と書いてしまいたいのです。
かといってpluginCommand関数を使うのも何か違いますし。
こういった事例でも、プラグインコマンドで「短く単純に」解消する方法があるのでしょうか?
また、この処理は重い軽いといった比較は、どのようにすればできるのか教えて頂けますでしょうか。
その方法は知っていたのですが、プラグインコマンドの場合は「値を返す」という事をする場合が面倒ですので、
あえてスクリプトで使う関数を追加したいと思っていました。
例えば、「console.log(sVal(a,b));」とした時に、コンソールに変更前と変更後の値の違いを文字列で出力されたり、
「console.log(Mes(a,b));」とした時に、コンソールに文字数を数えて返すなどと言った処理を加えたいのです。
また、試験的な処理を書く際にスクリプト機能を多用するため、
◆プラグインコマンド: Mes a b c(文字数を代入する変数ID)
◆スクリプト: var c = ???; console.log($gameVariables.value(c));
のみたいにするよりも
◆スクリプト: console.log(Mes(a,b));
と書いてしまいたいのです。
かといってpluginCommand関数を使うのも何か違いますし。
こういった事例でも、プラグインコマンドで「短く単純に」解消する方法があるのでしょうか?
また、この処理は重い軽いといった比較は、どのようにすればできるのか教えて頂けますでしょうか。
Re: $gameVariables.setValue(a,b)の短縮(と、返り値)
>その方法は知っていたのですが、プラグインコマンドの場合は「値を返す」という事をする場合が面倒ですので、
>あえてスクリプトで使う関数を追加したいと思っていました。
確かにイベントコマンド>スクリプト内で使う事が前提ならばプラグインコマンド化は迂遠ですね。
スクリプトコマンドを増設する場合も基本的にGame_Interpreter.prototypeに増設します。
注意点としてはjavascriptの仕様上thisの省略は出来ません。呼び出す場合はthis.sVal(a, b)です。
RGSSならthis(self)の省略が出来たんですけどね。
難しい事でもないので今後のスキルアップの為にも
Mes(this.Mes)の方は上の書式に則ってご自分で実装してみてください。
>また、この処理は重い軽いといった比較は、どのようにすればできるのか教えて頂けますでしょうか。
自分の場合は簡単なベンチマークで判断しています。
javascriptは以下のコマンドで2点間の処理時間を計測する事が出来ます。
これを応用して
こちらでテストプレイすると大体20倍前後、差が出るのでイベントコマンド>スクリプトは鈍重だと判断しました。
見ての通りカウントアップの書き方を変えてるだけです。
勿論、実行環境によって差異は出ると思うので一概には言えませんが。
>あえてスクリプトで使う関数を追加したいと思っていました。
確かにイベントコマンド>スクリプト内で使う事が前提ならばプラグインコマンド化は迂遠ですね。
スクリプトコマンドを増設する場合も基本的にGame_Interpreter.prototypeに増設します。
コード: 全て選択
(function() {
'use strict'
Game_Interpreter.prototype.sVal = function(a, b) {
$gameVariables.setValue(a, b);
return $gameVariables.value(a);
};
}());
RGSSならthis(self)の省略が出来たんですけどね。
難しい事でもないので今後のスキルアップの為にも
Mes(this.Mes)の方は上の書式に則ってご自分で実装してみてください。
>また、この処理は重い軽いといった比較は、どのようにすればできるのか教えて頂けますでしょうか。
自分の場合は簡単なベンチマークで判断しています。
javascriptは以下のコマンドで2点間の処理時間を計測する事が出来ます。
コード: 全て選択
console.time('任意の文字列'); // 計測開始
console.timeEnd('任意の文字列'); // 計測終了、及び表示
こちらでテストプレイすると大体20倍前後、差が出るのでイベントコマンド>スクリプトは鈍重だと判断しました。
見ての通りカウントアップの書き方を変えてるだけです。
勿論、実行環境によって差異は出ると思うので一概には言えませんが。
Re: $gameVariables.setValue(a,b)の短縮(と、返り値)
どうしても「this.sVal(a, b)」という書き方をしたくない(thisを付けたくない)なら、
こんな感じでcommand355関数をまるごとプラグインに取り込めば、できないことはないですね。
コード: 全て選択
(function () {
'use strict';
function sVal(a, b) {
$gameVariables.setValue(a, b);
return $gameVariables.value(a);
}
Game_Interpreter.prototype.command355 = function() {
var script = this.currentCommand().parameters[0] + '\n';
while (this.nextEventCode() === 655) {
this._index++;
script += this.currentCommand().parameters[0] + '\n';
}
eval(script);
return true;
};
}());
Re: $gameVariables.setValue(a,b)の短縮(と、返り値)
・名無し蛙 さん
詳細な解説とともにありがとうございます。
>スクリプトコマンドを増設する場合も基本的にGame_Interpreter.prototypeに増設します。
>注意点としてはjavascriptの仕様上thisの省略は出来ません。呼び出す場合はthis.sVal(a, b)です。
「Game_Interpreterに増設するだけ」の意味が良く分からなかったのですが、そういう事だったのですね。
>javascriptは以下のコマンドで2点間の処理時間を計測する事が出来ます。
確かに、スクリプトよりもプラグインコマンドのほうが早いですね。
教えて頂いた通り測ってみたら以下の通りでした。
スクリプト : this.sVal(a,b) → 1.050ms
プラグインコマンド : sVal a b → 0.523ms
デバッグの時だけスクリプトの方を用い、実装する時のみプラグインコマンドを使うようにしようと思います。
・奏ねこま(@こま) さん
こんなやり方もあるんですね。
速度は1.305msととても遅いですが、
書き易さで考えたらこちらの方がよさそうです。
どうもありがとうございました。
詳細な解説とともにありがとうございます。
>スクリプトコマンドを増設する場合も基本的にGame_Interpreter.prototypeに増設します。
>注意点としてはjavascriptの仕様上thisの省略は出来ません。呼び出す場合はthis.sVal(a, b)です。
「Game_Interpreterに増設するだけ」の意味が良く分からなかったのですが、そういう事だったのですね。
>javascriptは以下のコマンドで2点間の処理時間を計測する事が出来ます。
確かに、スクリプトよりもプラグインコマンドのほうが早いですね。
教えて頂いた通り測ってみたら以下の通りでした。
スクリプト : this.sVal(a,b) → 1.050ms
プラグインコマンド : sVal a b → 0.523ms
デバッグの時だけスクリプトの方を用い、実装する時のみプラグインコマンドを使うようにしようと思います。
・奏ねこま(@こま) さん
こんなやり方もあるんですね。
速度は1.305msととても遅いですが、
書き易さで考えたらこちらの方がよさそうです。
どうもありがとうございました。