如何在Android中制作一个游戏每毫秒执行一次的方法?

时间:2014-05-28 00:02:31

标签: java android

我正在尝试制作一款每毫秒执行gamelogic()的Android游戏。这就是我尝试过的。

long time = 0;
long previousTime = 0;
while (true) {
    time = System.currentTimeMillis();
    if (time - previousTime >= 1) {
        previousTime = time;
        gameLogic();
    }

}

这个问题是while循环会锁定整个应用程序 并且永远不会执行gamelogic()方法。感谢。

4 个答案:

答案 0 :(得分:2)

尝试java.util.Timer

 scheduleAtFixedRate(TimerTask task, long delay, long period)

答案 1 :(得分:0)

正确的方法是连续执行游戏更新循环。

如果运行时间为2毫秒,尝试每毫秒触发一次是没用的,你只需增加开销。

而且,如果需要运行20次,那么每100毫秒运行它是一种浪费。

我为这样的事情所做的是让一个带有while循环的线程,测量每次执行的时间。

它与您发布的代码基本相同,但将elapsedMilis参数传递给方法gameLogic

long previousTime = System.currentTimeMillis();
while (gameIsRunning) {
   long time = System.currentTimeMillis();
   long elapsedTime = previousTime - time;
   gameLogic(elapsedTime);
   previousTime = time;
}

答案 2 :(得分:0)

创建新主题 - >在这个线程中运行:

while(true){
    gamelogic();
    try {
         thread.sleep(1);
    } catch (exception e) {
         e.printStackTrace();
    }
}

也许这有效

答案 3 :(得分:-1)

你有多种选择

你可以使用1)runnable或2)asynctasnk 为了ai   或3)如果使用画布

,可以在ondraw中调用gameLogic()
 Handler h = new Handler(Looper.getMainLooper());
    h.post(new Runnable() {
        @Override
        public void run() {
            // do what you wanna do.

        }
    });