memo

ゲーム制作やデザインについての個人的メモ

【お知らせ】

おばけくんをひたすらクリックするだけのゲーム「おばけアタック!」を公開しました。
ティラノゲームフェス2017にも参加しています。1プレイ30秒程度なのでお気軽にプレイしてみてください!
プレイ&ダウンロードページ→http://novelgame.jp/games/show/508?fes=1

【ティラノスクリプト】実行環境の判定方法

自分用メモです。

ティラノスクリプトを使っていて、プレイヤーのゲーム実行環境がブラウザ版なのかPC版なのか判定したいときが(自分は)あります。

自分のホームページで公開するならブラウザ向けとPC向けのゲームファイルをそれぞれ用意すれば良いのかもしれませんが、単純に容量が倍になってしまいます。
また、ノベルゲームコレクション等の投稿サイトはブラウザ版もPC版もひとつのゲームファイルから生成するみたいなのでこの手は使えません。

ということで、どちらかだけに適用したい内容があるときは実行環境を判定するコードを書いて条件分岐させるのが良さそうです。

☆コメント欄で情報をいただきました
ティラノスクリプトでは予めPC版かブラウザ版か判定するための関数が定義されているので、それを利用すると簡単に実行環境の判定と条件分岐ができます。

ここでは例として「PC版(node-webkitで動作している場合)のみ、右上の×(閉じるボタン)を押したときに本当に終了するかの確認ダイアログを出す」という内容のコードを書いてみます。

[iscript]
if ($.isNWJS()) {
	var win = require('nw.gui').Window.get();
	win.on("close",function() {
		$.confirm($.lang("exit_game"), function() {
			win.close(true);
		}, function() {
			that.kag.ftag.nextOrder();
		});
	});
}
[endscript]

同じゲームファイルでもブラウザ版ではif内のコードは実行されません。

***

以下は判定方法から書いたコードです。参考のために残しておきます。

// Node.js で動作しているか
var isNode = (typeof process !== "undefined" && typeof require !== "undefined");
// ブラウザ上(非Node.js)で動作しているか
var isBrowser = !isNode
// node-webkitで動作しているか
var isNodeWebkit;
try {
    isNodeWebkit = isNode ? (typeof require('nw.gui') !== "undefined") : false;
} catch(e) {
    isNodeWebkit = false;
}

コード引用元:javascript - JavaScript実行環境の判定方法について - スタック・オーバーフロー

これで条件分岐させるための準備ができました。
ここでは例として「PC版(node-webkitで動作している場合)のみ、右上の×(閉じるボタン)を押したときに本当に終了するかの確認ダイアログを出す」という内容のコードを書いてみます。

if (isNodeWebkit) {
	var win = require('nw.gui').Window.get();
	win.on("close",function() {
		$.confirm($.lang("exit_game"), function() {
			win.close(true);
		}, function() {
			that.kag.ftag.nextOrder();
		});
	});
}

同じゲームファイルでもブラウザ版ではif内のコードは実行されません。

注意点

KSファイルに書く場合は判定コードと条件分岐コートを同じ[iscript]内に書いてください。別の[iscript]に記載したい場合はティラノスクリプトの変数に代入すると使えるようになります。

[iscript]
// Node.js で動作しているか
var isNode = (typeof process !== "undefined" && typeof require !== "undefined");
// ブラウザ上(非Node.js)で動作しているか
var isBrowser = !isNode
// node-webkitで動作しているか
var isNodeWebkit;
try {
    isNodeWebkit = isNode ? (typeof require('nw.gui') !== "undefined") : false;
} catch(e) {
    isNodeWebkit = false;
}

sf.isNode = isNode;
sf.isBrowser = isBrowser ;
sf.isNodeWebkit = isNodeWebkit;
[endscript]

[iscript]
if (sf.isNodeWebkit) {
	var win = require('nw.gui').Window.get();
	win.on("close",function() {
		$.confirm($.lang("exit_game"), function() {
			win.close(true);
		}, function() {
			that.kag.ftag.nextOrder();
		});
	});
}
[endscript]

※自分の環境(Windows10/Chrome)でしか動作確認していないので、コードを使用される際は十分検討の上テストプレイを必ず行ってください。