仅重新执行函数的一部分

时间:2017-11-11 22:55:33

标签: javascript

我正在制作浏览器游戏,我的项目的相关部分就是这样设置的。 我有一个名为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()并将其放入一个只被调用一次的函数中,但还有另一种方法吗?

1 个答案:

答案 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);