読者です 読者をやめる 読者になる 読者になる

ANOS-SOFT

Salesforce、RPGツクール、Unity、そんな雑記

【ツクールMV】自作メニューを作りたい 第5回

調子が乗ってる日はたくさん書ける、のすです。

早速、Scene_Menuを探しましょう。
プロジェクトのフォルダを開くと

  • audio
  • data
  • fonts
  • icon
  • img
  • js
  • movies
  • save

という感じでフォルダが並んでるかと思いますが、
RPGツクールMVの本体はdataとjsです。

それ以外は素材です。imgには画像(image)が、audioには音楽ファイルが格納されています。
dataはキャラクターの設定やシステム設定、イベントなんかが入っているのですが
これらの動作をつかさどっているのがjsフォルダです。

では、この中からScene_Menuの処理が書いてあるjsファイルを見つけましょう★

特定の処理の見つけ方

見つけましょうったって、簡単に見つけられないですよね
jsファイルは一番長いrpg_objects.jsだと1万行を超えるほどの処理が書かれています。
こんなにたくさんある中から探せなんて言う方が無理なので、簡単な探し方を紹介します。

サクラエディタ Download

こちらのサクラエディタを使いましょう。
ゲームに限らず、色々な開発現場で使われているフリーのエディタです。
インストール方法やなんかは難しくないので各自で調べてください…。

はてさて、サクラエディタを開くと何も書かれていないテキストが開くかと思います。

f:id:anos-soft:20161116205104p:plain

この子はいったん置いといて、プロジェクトフォルダを開いてください。
その中のjsフォルダをキーボードのShiftを押しながら右クリックして、「パスのコピー(A)」をしてください。
f:id:anos-soft:20161116205209p:plain

パスのコピーとは、クリックしているファイルがパソコンのどの位置に保存されているかという情報をコピーする。ということです
パスという言葉は情報系の技術者にでもならない限り必要ないかもしれません。
説明を続けます。

先ほどの何も書かれていないサクラエディタを開いてキーボードのCtrlを押しながらGを押してください。

f:id:anos-soft:20161116205659p:plain

こんなウィンドウが出ましたよね?

条件に「Scene_Menu」、ファイルに「*.js」、そしてフォルダに先ほどコピーしたパスを貼り付けてください。
貼り付けたら「検索」をクリック!

f:id:anos-soft:20161116205918p:plain

どどどどっと、Scene_Menuと書かれた部分が検索されました。
これはGrepという機能で、先ほど指定したパス以下にあるjsファイルから「Scene_Menu」と書かれた行を探してくれたのです。
この中でどれがScene_Menuについて書かれた部分なのかを見極めるには、ずばり文頭をチェックしてください。

// Scene_Menu

このように、//から始まっている文は当たりの可能性が非常に高いです。
//というのは、JavaScriptでコメントとして扱われる行に記載するものであり、
//の後に書かれた内容はすべて処理に関係ないものだからです。

この辺は、プログラミング コメント とかでぐぐってもらえれば色々解説が出るかと思うので、調べてみてください。

ではさっそく、この//Scene_Menuが書かれた部分をダブルクリックしましょう!

f:id:anos-soft:20161116210337p:plain

こうなりました?なったら成功です!よく似た// Scene_MenuBaseがあるので気を付けてください!

ということで、以下にScene_Menuの処理全文を載せて今回は終わります。

//-----------------------------------------------------------------------------
// Scene_Menu
//
// The scene class of the menu screen.

function Scene_Menu() {
    this.initialize.apply(this, arguments);
}

Scene_Menu.prototype = Object.create(Scene_MenuBase.prototype);
Scene_Menu.prototype.constructor = Scene_Menu;

Scene_Menu.prototype.initialize = function() {
    Scene_MenuBase.prototype.initialize.call(this);
};

Scene_Menu.prototype.create = function() {
    Scene_MenuBase.prototype.create.call(this);
    this.createCommandWindow();
    this.createGoldWindow();
    this.createStatusWindow();
};

Scene_Menu.prototype.start = function() {
    Scene_MenuBase.prototype.start.call(this);
    this._statusWindow.refresh();
};

Scene_Menu.prototype.createCommandWindow = function() {
    this._commandWindow = new Window_MenuCommand(0, 0);
    this._commandWindow.setHandler('item',      this.commandItem.bind(this));
    this._commandWindow.setHandler('skill',     this.commandPersonal.bind(this));
    this._commandWindow.setHandler('equip',     this.commandPersonal.bind(this));
    this._commandWindow.setHandler('status',    this.commandPersonal.bind(this));
    this._commandWindow.setHandler('formation', this.commandFormation.bind(this));
    this._commandWindow.setHandler('options',   this.commandOptions.bind(this));
    this._commandWindow.setHandler('save',      this.commandSave.bind(this));
    this._commandWindow.setHandler('gameEnd',   this.commandGameEnd.bind(this));
    this._commandWindow.setHandler('cancel',    this.popScene.bind(this));
    this.addWindow(this._commandWindow);
};

Scene_Menu.prototype.createGoldWindow = function() {
    this._goldWindow = new Window_Gold(0, 0);
    this._goldWindow.y = Graphics.boxHeight - this._goldWindow.height;
    this.addWindow(this._goldWindow);
};

Scene_Menu.prototype.createStatusWindow = function() {
    this._statusWindow = new Window_MenuStatus(this._commandWindow.width, 0);
    this.addWindow(this._statusWindow);
};

Scene_Menu.prototype.commandItem = function() {
    SceneManager.push(Scene_Item);
};

Scene_Menu.prototype.commandPersonal = function() {
    this._statusWindow.setFormationMode(false);
    this._statusWindow.selectLast();
    this._statusWindow.activate();
    this._statusWindow.setHandler('ok',     this.onPersonalOk.bind(this));
    this._statusWindow.setHandler('cancel', this.onPersonalCancel.bind(this));
};

Scene_Menu.prototype.commandFormation = function() {
    this._statusWindow.setFormationMode(true);
    this._statusWindow.selectLast();
    this._statusWindow.activate();
    this._statusWindow.setHandler('ok',     this.onFormationOk.bind(this));
    this._statusWindow.setHandler('cancel', this.onFormationCancel.bind(this));
};

Scene_Menu.prototype.commandOptions = function() {
    SceneManager.push(Scene_Options);
};

Scene_Menu.prototype.commandSave = function() {
    SceneManager.push(Scene_Save);
};

Scene_Menu.prototype.commandGameEnd = function() {
    SceneManager.push(Scene_GameEnd);
};

Scene_Menu.prototype.onPersonalOk = function() {
    switch (this._commandWindow.currentSymbol()) {
    case 'skill':
        SceneManager.push(Scene_Skill);
        break;
    case 'equip':
        SceneManager.push(Scene_Equip);
        break;
    case 'status':
        SceneManager.push(Scene_Status);
        break;
    }
};

Scene_Menu.prototype.onPersonalCancel = function() {
    this._statusWindow.deselect();
    this._commandWindow.activate();
};

Scene_Menu.prototype.onFormationOk = function() {
    var index = this._statusWindow.index();
    var actor = $gameParty.members()[index];
    var pendingIndex = this._statusWindow.pendingIndex();
    if (pendingIndex >= 0) {
        $gameParty.swapOrder(index, pendingIndex);
        this._statusWindow.setPendingIndex(-1);
        this._statusWindow.redrawItem(index);
    } else {
        this._statusWindow.setPendingIndex(index);
    }
    this._statusWindow.activate();
};

Scene_Menu.prototype.onFormationCancel = function() {
    if (this._statusWindow.pendingIndex() >= 0) {
        this._statusWindow.setPendingIndex(-1);
        this._statusWindow.activate();
    } else {
        this._statusWindow.deselect();
        this._commandWindow.activate();
    }
};

www.anos-soft.com

広告を非表示にする