// コンストラクタ
function interpreter() {
//初期の変数をここにかいてある
// ゲームマップをコンストラクタ内で保持
this.gameMap = {
“マインスイーパー”: createMineSweeperScene,
// 他のゲームもここに追加
};
};
// ゲーム起動: 指定されたゲームを起動して、終了後は指定シナリオに戻る
interpreter.prototype.ゲーム起動 = function(args) {
var gameName = args[0]; // 起動するゲーム名
var next_scene = args[1]; // ゲーム終了後に戻るシナリオ名(文字列)
var self = this; // thisを保存(イベント内で使うため)
//this === interpreterインスタンス
// ⭐ シナリオ復帰関数を作成(ゲーム終了後に呼ばれる)
const resumeScenario = function() {
exec(eval(next_scene)); // 指定シナリオを実行
};
// ゲーム作成関数を取得
const createSceneFunc = this.gameMap[gameName]; // gameMap から関数を取得
if (!createSceneFunc) {
console.error(“ゲームが見つかりません:”, createSceneFunc); // エラー表示
textLayer.removeChild(label); // ラベル削除
return; // 処理中断
}
// ⭐ シナリオ復帰関数を渡してゲームSceneを生成
const gameScene = createSceneFunc(core, resumeScenario); // ミニゲームScene作成
// 次へボタン作成
const next = new Label(‘【次へ】’); // ラベル作成
next.font = “16px monospace”; // フォント設定
next.color = “rgb(255,200,0)”; // 色設定
next.x = 320 – 64; // X座標
next.y = 320 – 16; // Y座標
next.width = 320; // 幅
textLayer.addChild(next); // 画面に追加
this.next = next; // インスタンスに保持
//interpreterInstance.next = next;
next.addEventListener(Event.TOUCH_START, function(e) {
//textLayer.removeChild(label); // ナウローディングラベル削除
self.セリフクリア(); // 画面上のセリフをクリア
core.replaceScene(gameScene); // この場合ではミニゲームSceneに遷移
});
};
—————————————————————————————-
■ 全体の流れ
scenario.jsで呼ぶ
‘ゲーム起動’: [‘マインスイーパー’, ‘nextscene’]
interpreterが受け取る
args[0] → ゲーム名
args[1] → 戻るシーン
gameMapから関数取得
“マインスイーパー” → createMineSweeperScene
ゲームScene作成
createMineSweeperScene(core, resumeScenario)
【次へ】でゲーム開始
ゲーム側で
resumeScenario();
👉 シナリオに戻る
—————————————————————————————-
scenario.js側で
‘ゲーム起動’: [‘マインスイーパー’, ‘nextscene’],
という形でゲームを起動できるようにする
// ゲーム起動: 指定されたゲームを起動して、終了後は指定シナリオに戻る
interpreter.prototype.ゲーム起動 = function(args) {
var gameName = args[0]; // 起動するゲーム名
var next_scene = args[1]; // ゲーム終了後に戻るシナリオ名(文字列)
var self = this; // thisを保存(イベント内で使うため)
//this === interpreterインスタンス
‘ゲーム起動’: には [‘ゲーム名’, ‘nextscene’],の二つをいれる
interpreter.prototype.ゲーム起動 = function(args) のargsには
args[0]に起動したいゲームの名前が
args[1]に次のシーンが入る
thisに入ってる interpreterインスタンスを var selfにいれておく
—————————————————————————————-
// ⭐ シナリオ復帰関数を作成(ゲーム終了後に呼ばれる)
const resumeScenario = function() {
exec(eval(next_scene)); // 指定シナリオを実行
};
これはのちにminesweeper.js側から resumeScenario(); と呼び出すことで 次のシーンへ進める
—————————————————————————————-
// ゲーム作成関数を取得
const createSceneFunc = this.gameMap[gameName]; // gameMap から関数を取得
if (!createSceneFunc) {
console.error(“ゲームが見つかりません:”, createSceneFunc); // エラー表示
textLayer.removeChild(label); // ラベル削除
return; // 処理中断
}
// ⭐ シナリオ復帰関数を渡してゲームSceneを生成
const gameScene = createSceneFunc(core, resumeScenario); // ミニゲームScene作成
minesweeper.jsにある
function createMineSweeperScene(core, resumeScenario) {
という関数を呼び出したい
—————————————————————————————-
// 次へボタン作成
const next = new Label(‘【次へ】’); // ラベル作成
next.font = “16px monospace”; // フォント設定
next.color = “rgb(255,200,0)”; // 色設定
next.x = 320 – 64; // X座標
next.y = 320 – 16; // Y座標
next.width = 320; // 幅
textLayer.addChild(next); // 画面に追加
this.next = next; // インスタンスに保持
//interpreterInstance.next = next;
ボタンを作成する
—————————————————————————————-
next.addEventListener(Event.TOUCH_START, function(e) {
//textLayer.removeChild(label); // ナウローディングラベル削除
self.セリフクリア(); // 画面上のセリフをクリア
core.replaceScene(gameScene); // この場合ではミニゲームSceneに遷移
});
【次へ】を押したときのイベント発火
—————————————————————————————-
。