我正在尝试制作一款每毫秒执行gamelogic()
的Android游戏。这就是我尝试过的。
long time = 0;
long previousTime = 0;
while (true) {
time = System.currentTimeMillis();
if (time - previousTime >= 1) {
previousTime = time;
gameLogic();
}
}
这个问题是while循环会锁定整个应用程序
并且永远不会执行gamelogic()
方法。感谢。
答案 0 :(得分:2)
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.
}
});