Help us understand the problem. What is going on with this article?

ツクールMVゲームの実行時構造

ツクールMVは、ツクールシリーズで初めてマルチプラットフォーム対応(Windows, Mac, iOS/Android, HTML)となっているのは皆様もご存知の事かと思います。
そこで今回は、「ツクールMVが如何にそれを成し遂げているのか」その辺の仕組みを解説いたします。

実行時のツクールの構造

大まかには以下の通りとなります。
image.png

ユーザープラグイン

皆様が作ったり、ダウンロードしてきたりする追加プラグインです。
殆どの場合コアプラグインの機能を呼び出したり上書きする事で動作します。

コアプラグイン

ツクールMVに最初から付属しているプラグインです。「rpg_○○.js」系列が該当します。
特にrpg_core.jsが重要で、直接ホームページ上の要素を操作する部分を担当しております。

pixi.js

コアプラグインの一部と見なす事も出来ますが私はあえて分離させました。
描画系を担当しております。(実際にbitmapを表示したり色を変えたりなど)

index.html

index.html本体です。以上の各javascriptはこのページ上で動いております。

変換フレームワーク

私が調べる限りではWindows版は「nw.js」(Node.js系列)、Android/iOSでは「Cordova」(Monacaもこれを使用)しているようです。
アプリとして自分のウィンドウの中にhtmlデータを表示する事で、ホームページをあたかもネイティブアプリのように見せかける事が可能です。
(一応Android用はAndroid Studioを経由する方法もありますが、公式がMonacaのサービスを作っておりますため、ここではCordovaを基準にしてます)

変換フレームワーク関連の雑記

Nw.js

https://nwjs.io/

確実にはいえませんがgame.exeがnw.js系の本体(nw.exe)かと思われます。同場所にありますpackage.jsonに初期ウィンドウの設定類が含まれております。

package.json
{
    "name": "KADOKAWA/RPGMV",
    "main": "www/index.html", //最初にロードするHTMLファイルの場所
    "js-flags": "--expose-gc",
    "window": {
        "title": "",          //windowの最初のタイトル(後でScene_Boot.prototype.updateDocumentTitleで差し替えられます)
        "toolbar": false,    //アドレスバーを表示するか否か
        "width": 816,       //窓横幅
        "height": 624,     //窓縦幅
        "icon": "www/icon/icon.png"  //exeファイルのアイコンの場所
    }
}

(注釈コメントは私がつけたものです)

起動した後、
SceneManager.run→SceneManager.initializeを経て以下が呼び出されます。

rpg_manager.js
SceneManager.initNwjs = function() {
    if (Utils.isNwjs()) {
        var gui = require('nw.gui');
        var win = gui.Window.get();
        if (process.platform === 'darwin' && !win.menu) {
            var menubar = new gui.Menu({ type: 'menubar' });
            var option = { hideEdit: true, hideWindow: true };
            menubar.createMacBuiltin('Game', option);
            win.menu = menubar;
        }
    }
}; 

何かnw.jsのウィンドウに対しての操作を行いたければここのwin変数がウィンドウなので、それに対して行うと良いでしょう。

Cordova

https://cordova.apache.org/

対応するプラットフォームを追加する事が出来、様々な(Cordova自体が対応する機能を増やす)プラグインが存在します。
ただ逆に言えば、HTML5やjavascriptに於いてデフォルトで出来る機能でも、プラグインをインストールする必要がある物が存在します。
一例として、window.open()はCordovaに於いてはプラグインinAppBrowserを必要とするようです。

こちらについては、残念ながら、私の手元に環境がなかった為あまり詳しく調べられておりません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした