enchant.js マインスイーパ コード解説①

// コンストラクタ
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に遷移
});

【次へ】を押したときのイベント発火 

—————————————————————————————-

ブログランキング・にほんブログ村へにほんブログ村

開発ログ一覧

エロゲーム一覧