シーンに引数を渡す

シーンを切り替える際、SceneManager.goto とか SceneManager.push を使うが、このとき引数を次のシーンに渡すことができる。それがprepareNextSceneだ。
例えば、Scene_Testに遷移するとき、以下のような感じで渡せる。

1
2
SceneManager.push(Scene_Test);
SceneManager.prepareNextScene(123, "abc");

遷移先のシーンでは、以下のprepareメソッドで受け取れる。

1
2
3
Scene_Test.prototype.prepare = function(a, b) {
console.log(a, b); //123, "abc"
};

シーンからマップに場所移動

reserveTransferを使う

独自に作ったシーンからあるマップのある位置に移動するには$gamePlayer.reserveTransferを使う。
このメソッドの詳しい説明は以下のサイトが詳しい。
ツクールMVのスクリプトで場所移動を行う方法
ただ、Scene_MapからScene_Mapへの移動なら$gamePlayer.reserveTransferを呼び出すだけで移動できるが、
Scene_Map以外のシーンからの移動の場合は、reserveTransferに加えて、SceneManager.goto(Scene_Map)が必要。

1
2
$gamePlayer.reserveTransfer(6, 1, 1, 8, 0);
SceneManager.goto(Scene_Map);

Map IDの特定方法

ところで、$gamePlayer.reserveTransferの第一引数にMapのIDを渡さなければいけないが、これをどこで確認するか。
2つ方法があり、1つはエディタのマップの編集画面の以下の箇所。

もう1つは data/MapInfos.json を開くとidがわかる。

Map IDを名前から検索

私はよく使うのだが、マップ名からMAP IDを検索する方法を載せておく。

1
2
3
4
5
6
function getMapId(mapName){
for(var i = 0; i < $dataMapInfos.length; i++){
if($dataMapInfos[i] && $dataMapInfos[i].name == mapName) return $dataMapInfos[i].id;
}
return null;
}

ウィンドウに画像を表示する

ウィンドウに画像を表示するには簡単にいうと2つ方法があります。
それぞれ解説します。

Spriteを作る方法

Spriteを作ってウィンドウにaddChildするだけで表示できます。
このSpriteはPIXIのSpriteを継承しているので、そのメソッドなどを使えます。
PIXI.Sprite

1
2
3
4
5
var sprite = new Sprite();
sprite.bitmap = ImageManager.loadBitmap('img/path/', 'image-name');
sprite.x = 100;
sprite.y = 100;
this.addChild(sprite);

contents.blt を使用する方法

Window_Baseはメンバーにcontentsを持っており、このbltメソッドで表示できます。
ただし、このとき指定するbitmapはロード済みでないと表示できません。キャッシュにあれば表示できます。
そこで、bitmapのロードイベントにfunctionを登録してロード完了後にbltを呼び出す方法があります。

1
2
3
4
var bitmap = ImageManager.loadBitmap('img/path/', 'image-name');
bitmap.addLoadListener(function() {
this.contents.blt(bitmap, 0, 0, bitmap.width, bitmap.height, rect.x, rect.y, rect.width, rect.height);
}.bind(this));

スプレッドシートからjsonにしてツクールに取り込む

ツクールMVでは自分で作成したjsonファイルをゲームに取り込むことができます。
デフォルトにある武器、防具、アイテムといったデータベースだけでなく、自由にデータを取り込めるので便利です。
私はGoogleのスプレッドシートでデータを管理していることが多いので、そこからjsonファイルを吐き出して取り込むということをよくします。今回はそのやり方を書きます。

スプレッドシートからjsonを吐く

今回、例として英和単語帳を作ります。こんなの。

スプレッドシートのメニューの「ツール」から「スクリプトエディタ」を開きます。
開いたら、以下のようなコードを用意します。シート名は適宜変更してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function myFunction() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");
var keys = sheet.getSheetValues(1, 1, 1, sheet.getLastColumn())[0]; //キー取得
var data = sheet.getSheetValues(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); //キー以外の全列取得
var list = [];
data.forEach(function(row){
var obj = {};
for(var i = 0; i < keys.length; i++){
obj[keys[i]] = row[i];
}
list.push(obj);
});
Browser.msgBox(JSON.stringify(list)); //表示
}

そしたら、実行ボタンで実行。

実行

スプレッドシート画面に戻ると以下のように出力されてます。

和英のjson

1
[{"en":"use","ja":"使う、用いる、使用する、利用する"},{"en":"make","ja":"作る、造る、作る、製作する"},{"en":"eat","ja":"食べる"},{"en":"push","ja":"押す"},{"en":"pull","ja":"引く"},{"en":"drink","ja":"飲む"},{"en":"sound","ja":"音"},{"en":"tree","ja":"木"}]

辞書データになってますね。

ツクール側から使用する

ツクールフォルダのdataフォルダにDictionary.jsonとしてファイルを作成し、上記出力内容をコピペします。
そしたら、以下のようなプラグインを作って有効化します。
これで自動的にjsonファイルを読み込み、$dataDictionary変数から使えるようになります。

1
2
3
4
5
(function () {
DataManager._databaseFiles.push(
{ name: '$dataDictionary', src: 'Dictionary.json'}
);
})();

試しに、以下のようなイベントを実行してみます。

イベント

実行結果

うん。ちゃんと扱えてます。
こんな感じで、スプレッドシートから作ったjsonファイルをツクールで読み込むことができました。

イベントテストで読み込めない

上記のイベントをイベントテストするとロードエラーがでます。
というのも、イベントテスト時はdataフォルダ配下にTest_Actors.jsonみたいにTest_が付与されたデータファイルが生成されます。自分で追加したjsonファイルは自動的にTest_ファイルが生成されないため、エラーが出るのです。
対策としては、Test_のファイルを手動で作っておいておくことが挙げられます。
今回でいえば、Test_Ditionary.jsonを置いておくことになります。

ランダムにアイテムを取得するプラグイン

らんだむダンジョンがすごい好きで周回要素ないのに50時間ぐらいかかるのを2週プレイした。
らんだむダンジョンはランダムにアイテムが手に入る宝箱がある。今回はそれを実装した。
ツクールのデフォルトの機能でも実現できるけど、結構面倒くさいので、簡単にできるプラグインを作る。

ランダムに手に入る宝箱

いろいろ仕様を考えたんだけど、こういう仕様にしたい。

  1. ランダムに手に入るアイテム群を設定できる(ダンジョンごとに異なるアイテム群を設定できる)
  2. アイテムごとに異なる確率を設定できる
  3. できるだけ設定しやすく、1と2を実現する

ランダムに手に入るアイテム群を設定できる

まず1だけど、参考になるのはデフォルトにあるガチャのプラグイン。
あれはどうやってアイテムを設定しているかというとプラグインコマンドで以下のようにしている。

1
2
Gacha add item 5
Gacha add armor 1

これでもいいんだけど、IDとか調べてやるのちょっと大変。
この際、アイテム選択があるコマンドを乗っ取ることにした。ショップコマンドだ。
ショップコマンドはアイテムをGUIで選択できるので設定しやすくて良い。

ショップコマンド

アイテムごとに異なる確率を設定できる

次に2番。つまりレアなアイテムは出にくくしたい。ショップコマンドはアイテムごとに価格を設定できる。
ちょうどいいので、この価格を確率にしてしまおう。
くじの本数だと考えてほしい。例えば、アイテムが3つあって、アイテム1=10、アイテム2=10、アイテム3=1だったとする。
こうすれば、くじの本数が1本しかないアイテム3は出にくくなる。

確率

確率一覧

導入方法

まず、プラグインがこれ
導入したら、まずプラグインコマンドで RandomTreasure reset を実行する。
このコマンド直後のショップ処理で登録したアイテムがランダムに手に入るアイテム群となる。ショップは開かれない。

設定プラグインコマンド

そして、次に宝箱側の設定だ。プラグインコマンドで RandomTreasure get を実行するとランダムに1個手に入る。
メッセージウィンドウに手に入れたアイテム名を表示したいときは以下のようなスクリプトを書く。

1
2
3
var item = $gameSystem.lastRandomTreasure;
$gameMessage.add("\\i[" + item.iconIndex + "]" + item.name + "を手に入れた");
this.setWaitMode('message');

宝箱側のプラグインコマンド

ランダムに取得

ライセンス

MIT
自由にご利用ください。