RSS
热门关键字:
当前位置 : 主页>嵌入式开发>VxWorks>列表

在Pocket PC上编写游戏之六

来源:我要研发网 作者: 时间:1970-01-01 点击:



导读

  大多数动作游戏运行时,我们看见游戏在不停移动着。如果在DOS操作系统下,程序员很容易可以做到这点,但是如果在Win32这个多支持任务操作系统环境,超过一个以上应用程序好象正在在同一个时间同时运行。 这时你游戏只是其中一个,另外程序虽然可能没有显示出来,但它们运行在后台。 这将引起一个问题,就是我们需要和其他程序进程分享CPU时间。

  自己运行

  在先前章节,在最后例子源码中你可能已经发现了一个API函数SetTimer(..)。一个典型Win32程序有一个主窗口函数,和一个过程处理函数WndProc,用来处理Windows操作系统发送来消息。如果没有新消息进来,我们代码便什么也不做,好象休眠了一样。如何使程序能够自动运行,而不需要人工干涉呢?建立一个无限循环确实可以达到这个目,但是你会失去和操作系统之间通讯。因为只要你还在循环体中,你便不可能处理下一条来自消息队列消息。那怎么办,我们可以使用SetTimer(...)这个API函数,他可以适时向WndProc发送请求,让操作系统招呼一下我们。*_-

字串6



  在你调用SetTimer(hwnd,wid,n,0)以后只是一时间。 操作系统将每[n] 毫秒发送一个WM_TIMER消息到你窗口过程函数。现在,让我们试试这代码

// replace to startup.c
LRESULT MainWndProc(HWND hWnd, UINT message, WPARAM uParam, LPARAM lParam)
{
 switch(message)
 {
  case WM_TIMER:
   MessageBeep(0);
   break;
  case WM_KEYDOWN:
   DestroyWindow(hWnd);
   break;
  case WM_CREATE:
   SetTimer(hWnd,1,500,0);
   break;
  case WM_DESTROY:
   PostQuitMessage(0);
   break;
  default:
   DefWindowProc(hWnd, message, uParam, lParam);
 }
 return 0;
}

  这个程序效果是:每500毫秒便会发出哔哔声。

  什么是可分享时间? 字串7

  现在, 我们能让使用定时器使程序工作了。在游戏应用程序中,定时器是非常重要,因为如果没有这种方法,想要让我们程序运行要复杂多。

  好让我们进一步学习有关可分享时间。这是一个什么样机制呢?我们来看看。由操作系统发送WM_TIMER 消息到我们WndProc开始。消息将会在我们规定了时间间隔再次发送送SetTimer(...)。如果间隔是500毫秒。 那意味我们需要在下次发送之前完成我们工作。如果不能完成,那我们只好等下一次了。我们将失去500毫秒。

  在两次时间间隔中我们需要做游戏需要大量工作,例如:处理输入和游戏人工智能,移动对象,碰撞检查等等。如果你设计游戏运动速率是8帧/秒,所以你有最多125毫秒(1000/ 8 = 125毫秒)时间处理每个帧。不过不必担心125毫秒会不会够用,因为我们PDA运行速率是100-200 MHz。它能立刻处理超过一个百万指令。
字串8


  请注意,定时器和回调函数象迈步一样不停转换。在处理以后一个定时器消息后,需要回到系统。在这意味着我们暂时放弃了应用程序控制权。直到消息再次到达,我们代码才会再次运行。
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
相关文章