百万通りの方法で実行できます。しかし、あなたは最も快適に感じ、エンジニアは最も自信を持っています。
インスピレーションやコード例を探しているなら、私がそれをする一つの方法があります。ボタンが押されるまで繰り返しメニューを描画する機能があります。ボタンが押されると、ゲームがロードされ、古いメニュークリックイベントリスナーが削除され、新しいゲームクリックイベントリスナーが追加されます。また、メニューの古いドローループを終了し、新しいゲームドローループを開始します。以下に、選択方法を示すために選択したスニペットを示します。
Game.prototype.loadMenu = function() {
var game = this;
var can = this.canvas;
// now we can use the mouse for the menu
can.addEventListener('click', game.menuClickEvent, false);
can.addEventListener('touchstart', game.menuClickEvent, false);
// draw menu
this.loop = setInterval(function() { game.drawMenu() }, 30);
};
Game.prototype.drawMenu = function() {
// ... draw the menu
}
Game.prototype.loadLevel = function(levelstring) {
// unload menu
var can = this.canvas;
var game = this;
can.removeEventListener('click', game.menuClickEvent, false);
can.removeEventListener('touchstart', game.menuClickEvent, false);
if (this.loop) clearInterval(this.loop);
// ... other level init stuff
// now we can press keys for the game
//can.addEventListener('click', game.gameClickEvent, false);
can.addEventListener('touchstart', game.gameClickEvent, false);
can.addEventListener('keydown', game.gameKeyDownEvent, false);
this.loop = setInterval(function() { game.tick() }, 30);
}
// called from tick()
Game.prototype.draw = function(advanceFrame) {
// ...
}
このようにして、ゲーム描画とゲームイベントをメニュー描画とメニューイベントから分離することができます。また、メニューでゲーム/アニメーション要素を使用して、見栄えを良くしたい場合に使用する余裕があります。