ページ 11

メッセージなどの文字列中の式展開プラグイン

Posted: 2016年12月31日(土) 06:54
by 焼きノリ
【このプラグインでできること】
RGSSもといRubyでは、 "10 * 10 = #{ 10*10 }" のように文字列中でコードを評価することができます。
MVでもそれと同じようなことができる関数を定義しました。

ES6からテンプレート文字列というのが実装され、
これと同様のことができるようになったのですが、未対応のブラウザもある模様。
その点これは、テンプレート文字列を使用していないのでどの環境でも使えるはず。

追加した関数を利用して、ツクール中の以下のテキストは
展開用の形式が書かれていれば自動で式展開されるようになります。
  1. メッセージのテキスト
  2. ヘルプウィンドウのテキスト
  3. 選択肢のテキスト
  4. プラグインコマンド

【このプラグインの使い方】

コード: 全て選択

${ JavaScriptCode }
この形式を文字列に含め、JavaScriptCode の部分にコードを書くだけです。
JavaScriptCodeが展開され、その結果を文字列にします。

例として、自身のイベント名を表示するメッセージです。
(これやるならイベント名に置換される制御文字を増やせばいいなんて思っちゃダメ)
YKNR_StringInterpolation_01.jpg

YKNR_StringInterpolation_02.jpg
選択肢のテキストにも、展開用の形式を書いておけば同様にゲームに反映されます。

-------------------------------------------------------------------------------------------

スクリプト内で文字列の式展開をする場合は、以下の2通りから展開が可能です。

コード: 全て選択

// interpolation関数を使用する
var message = '';
message += '現在のマップのIDは ${$gameMap.mapId()}\n';
message += '現在のマップの表示名は ${$gameMap.displayName()} です。';

console.log(message);
// => 現在のマップのIDは ${$gameMap.mapId()}
//    現在のマップの表示名は ${$gameMap.displayName()} です。

console.log(message.interpolation(this));
// => 現在のマップのIDは 1
//    現在のマップの表示名は ダミーマップ です。

コード: 全て選択

// template関数を使用する
var message = '';
message += '現在のマップのIDは ${mapId}\n';
message += '現在のマップの表示名は ${abcdefg} です。';

var values = {};
values['mapId'] = $gameMap.mapId();
values['abcdefg'] = $gameMap.displayName();

console.log(message);
// => 現在のマップのIDは ${mapId}
//    現在のマップの表示名は ${abcdefg} です。

console.log(message.template(values));
// => 現在のマップのIDは 1
//    現在のマップの表示名は ダミーマップ です。


画像
画像
画像
画像
画像
画像

Re: メッセージなどの文字列中の式展開プラグイン

Posted: 2017年1月12日(木) 19:46
by メルサイア
>焼きノリさん
これはすごい応用性の高いプラグインorスクリプトですね!!
私はMVからなので、「すごい、こんな方法があるなんて‥」と、目からウロコです。

メッセージ表示はあまり処理速度を気にしないでいい場所だと思うので、evalもあまり気にならないと思います。

これを使えば、もうゲーム変数\V[n]にいろんな文字列を入れる必要もなくなるのかも…?
(でもやりすぎるとスクリプトの嵐になり、エラー時に困り果てることになりますが…)

競合対策もされてあるようですし、スクリプトエラーの検出と、使い方さえうまくやれば、凄いことが簡単にできそうです。
参考: エディタ中のスクリプトエラーの場所特定で悩まされた時は、翠さんが作成された以下のプラグインが役に立ちます。
viewtopic.php?f=5&t=2163&p=6907&hilit=%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88#p6907