我正在制作浏览器游戏,我的项目的相关部分就是这样设置的。 我有一个名为Game的命名空间,它包含我的游戏逻辑。 我有另一个名为Main的命名空间(稍后可能会更改),它处理按键操作和程序的控制流程。
在游戏中,我有一个函数init(),如果简化看起来像
const init = () => {
func1();
func2();
func3();
setInterval(repeatingFunc, 100);
};
如果我的家伙在重复功能中死亡,我会清除间隔并且游戏结束。 在Main中,我有类似
的东西 document.onkeydown = (event) => {
const keyCode = event.keyCode;
if (Game.getIsGameOver() === true) {
Game.setIsGameOver(false);
Game.resetValues();
Game.init();
}
if (Game.getIsPlaying() === false) {
Game.setIsPlaying(true);
}
// More code that handles key presses, etc
}
游戏将提示用户在游戏结束后按任意键再次开始,如果按下某个键,则会调用Game.init()。
我的问题如下。对于Game.init()的所有调用,不包括首次加载页面时的初始调用,即第一次游戏后的每个游戏,我都不希望func1()执行。假设func1()只是我第一次加载页面时需要发生的事情,并且在后续游戏重启时再也不会发生。除了func1()?
之外,我如何再次执行所有init()编辑:当然我可以从主函数中取出func1()并将其放入一个只被调用一次的函数中,但还有另一种方法吗?
答案 0 :(得分:0)
选项1:
添加另一个startGame()
方法,该方法不包含func1()
,并在init()
内调用,当用户想要再次播放时:
const startGame = () => {
func2();
func3();
setInterval(repeatingFunc, 100);
};
const init = () => {
func1();
startGame();
};
现在您可以第一次致电Game.init();
或重播Game.startGame();
。
选项2
使用标记进行重放:
const init = (replay) => {
replay || func1();
func2();
func3();
setInterval(repeatingFunc, 100);
};
现在您可以第一次致电Game.init();
或重播Game.init(true);
。