PostDelayed 功能越来越快

PostDelayed function going faster and faster

所以我有一个蛇应用程序,我正在尝试制作它,以便在新 运行.

之前等待屏幕触摸

我认为最好的方法是让代码停止更新蛇并继续 UI 更新。所以我有一个游戏状态是 运行ning 和一个丢失。

当我玩第一场比赛时,它会正常进行,但当我死掉并越过它时,它会变得越来越快。

我认为这与我在 运行 和 Lost 中调用 postDelay 方法的方式有关。但是,如果我只在 运行 中调用它并且在没有任何暂停的情况下再次输掉 运行 游戏,它 运行 会很顺利。

private void startUpdateHandler(){
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {

            if (gameEngine.getCurrentGameState() == GameState.running){
                gameEngine.Update();
                handler.postDelayed(this, updateDelay);
            }

            if (gameEngine.getCurrentGameState() == GameState.lost){
                if (trial) {
                    onGameLost();
                    trial = false;
                }
                if (touch){
                    gameEngine.initgame();
                    gameEngine.setToRunning();
                    trial = true;
                }
                handler.postDelayed(this, updateDelay);
            }

            snakeView.setSnakeViewMap(gameEngine.getMap());
            snakeView.invalidate();
        }
    }, updateDelay);
}

我可能没有得到正确的 postDelayed 方法,我试图搜索一种方法来暂停代码并等待点击。但这刚刚打破了我的密码。如果我在你死去和重新开始之间没有任何延迟,我就能让代码正常工作。

Whosebug 的新手所以如果我的问题不好我会尝试解决它!

***** 编辑 ******

我自己解决了这个问题,我把 handler.postDelayed(this, updateDelay);在 运行 函数的后面。我看到当我有 3000 毫秒的延迟时,每次我死了它每次移动都会额外跳一次,当我有 3 handler.postDelayed(this, updateDelay);我每次移动它都会多跳 2 次。

所以我得出结论,如果我写 postdelay 超过 1 次,它会随着时间的推移而累积。不知道为什么,但它现在运行良好,我将不胜感激任何可以解释这一点的人!

我不确定你的内部是如何工作的,但你可能有改变状态的方法,而且因为你有两个非嵌套的 if 调用,它可能会多次调用处理程序。我也觉得这会不断地添加到堆栈中并最终导致溢出错误。您可以通过使用开关或 if else 来解决第一个问题。

您可能还想考虑使用类似实现的间隔,然后在必要时更新间隔。看看 Android 的 Timer