您可以做到一百万种方式。但是,您会感到最舒适,工程师也会感到最有信心。
如果您正在寻找灵感或代码示例,那么这就是我的一种方法。我有一个反复绘制菜单直到按下按钮的功能。当按下按钮时,将加载游戏,并删除旧的菜单单击事件侦听器,并添加新的游戏单击事件侦听器。我还结束了菜单的旧绘制循环并开始了新的游戏绘制循环。以下是一些精选的片段,让您了解其操作方法:
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) {
// ...
}
这样,我就可以将游戏绘图和游戏事件与菜单绘图和菜单事件分开。如果我想让菜单看起来更漂亮,这也让我有余地在菜单中使用游戏/动画元素。