游戏编程 - 无限循环的CPU使用率

时间:2012-05-01 22:47:21

标签: java software-design 2d-games

我想创建一个简单的2D游戏。我不想使用线程。编程语言将是Java(但可以是任何语言,并不重要......)。

如果我使用像while(true)...这样的主循环(无限循环),是否可以避免高CPU使用率?

3 个答案:

答案 0 :(得分:3)

在游戏中,你通常有一个运行一切的主循环。但是,为了避免做不必要的事情,通常只以特定的帧速率(例如每秒60帧(FPS))更新游戏。

大多数游戏通过使CPU休眠直到需要计算/绘制新帧来实现此目的。在python游戏库pygame中,这是使用pygame.time.wait

完成的
  

将暂停一段给定的毫秒数。此函数会暂停进程以与其他程序共享处理器。等待几毫秒的程序将消耗很少的处理器时间。

答案 1 :(得分:1)

为了说明Darthfett的答案,控制台游戏的主循环通常如下所示:

#define FRAMELENGTH (1.0 / 60.0) // 60hz = 16.6ms per NTSC frame. Different for PAL. 
while ( !QuitSignalled() ) 
{
   double frameStartTime = GetTime(); // imagine microsecond precision
   HandleUserInput( PollController() );
   SimulateEntities(); 
   Physics();
   Render();
   Sound();
   etc();

   double timeUntilNextFrameShouldStart = GetTime() - frameStartTime + FRAMELENGTH;
   sleep( timeUntilNextFrameShouldStart  );   
}
// if down here, we got the 'quit' signal 
ExitToDesktop();

当然,如果一个帧的执行时间超过16.6ms,上面的循环将会中断,所以我们有特殊的代码来检测它并赶上或丢弃帧,但这是基本的想法。此外,直到最近我们实际上并没有使用浮点数作为时间,而是使用定点微秒计数器。

答案 2 :(得分:0)

你要做的就是“阻止输入”......你得到 CPU使用率。无论如何,直到事情发生。

几乎任何套接字程序都会有这样的循环:

  while (true) {
    select ()
    ...

您可以轻松等待“getchar()”或“WaitOnSingleEvent()

有人可能会说“阻止I / O”实际上是最佳设计策略。它击败了替代品 - “民意调查”(Polling is Evil)。

IMHO ..