我正在写一个简单的游戏,我想以60 fps的速度限制我的帧速率,而不是让循环吃掉我的cpu.我该怎么做?
你可以阅读游戏循环文章.在尝试实现任何内容之前,首先要了解游戏循环的不同方法非常重要.
我拿了@cherouvim发布的游戏循环文章,我采取了"最佳"策略并尝试为java Runnable重写它,似乎对我有用
double interpolation = 0; final int TICKS_PER_SECOND = 25; final int SKIP_TICKS = 1000 / TICKS_PER_SECOND; final int MAX_FRAMESKIP = 5; @Override public void run() { double next_game_tick = System.currentTimeMillis(); int loops; while (true) { loops = 0; while (System.currentTimeMillis() > next_game_tick && loops < MAX_FRAMESKIP) { update_game(); next_game_tick += SKIP_TICKS; loops++; } interpolation = (System.currentTimeMillis() + SKIP_TICKS - next_game_tick / (double) SKIP_TICKS); display_game(interpolation); } }
简单的答案是将java.util.Timer设置为每17毫秒触发一次,并在计时器事件中完成工作.