ツクールMVは、ツクールシリーズで初めてマルチプラットフォーム対応(Windows, Mac, iOS/Android, HTML)となっているのは皆様もご存知の事かと思います。
そこで今回は、「ツクールMVが如何にそれを成し遂げているのか」その辺の仕組みを解説いたします。
#実行時のツクールの構造
大まかには以下の通りとなります。
###ユーザープラグイン
皆様が作ったり、ダウンロードしてきたりする追加プラグインです。
殆どの場合コアプラグインの機能を呼び出したり上書きする事で動作します。
###コアプラグイン
ツクール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に初期ウィンドウの設定類が含まれております。
{
"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を経て以下が呼び出されます。
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
対応するプラットフォームを追加する事が出来、様々な(Cordova自体が対応する機能を増やす)プラグインが存在します。
ただ逆に言えば、HTML5やjavascriptに於いてデフォルトで出来る機能でも、プラグインをインストールする必要がある物が存在します。
一例として、window.open()
はCordovaに於いてはプラグインinAppBrowser
を必要とするようです。
こちらについては、残念ながら、私の手元に環境がなかった為あまり詳しく調べられておりません。