动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   程序开发 → 阅读文章

 在Pocket PC上编写游戏之六

作者来源: 
阅读 数 599 人次 , 2006-4-25 9:09:00 


  导读

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

  自己运行

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

  在你调用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毫秒便会发出哔哔声。

  什么是可分享的时间?

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

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

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

  请注意,定时器和回调函数象迈步一样不停的转换。在处理以后一个定时器消息后,需要回到系统。在这意味着我们暂时放弃了应用程序的控制权。直到消息再次到达,我们的代码才会再次运行。
  
 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:Windows任务管理器开发原理与实现
· 下一篇:WinCE 进程、线程和内存管理之同步
· 浅谈多态—概念描述
· 在Windows XP中查找加密文件
· 软件项目需求分析困难的原因
· WinCE线程和内存管理之内存管理
· Visual Studio .NET快速地构建和部署XML Web服务和应用程序


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077