Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
您现在的位置: 天极网 > 开发频道 > 在Pocket PC上编写游戏之八
全文

在Pocket PC上编写游戏之八

2004-04-10 13:03 作者: 雷神编译 出处: vchelp 责任编辑:方舟
  一个使用PtInRect函数的游戏例子。

  游戏开始后不停的随机产生一个任意大小的长方形,并显示在屏幕上,玩家需要使用笔去点击这些长方形,如果经碰撞检测证明点中,则长方形消失。如果不能及时的消灭最上面的长方形,它将会被新产生的遮盖住,当屏幕上的长方形数量达到32个时,你便GAME OVER了。

  请到原文网站下载这个游戏的EVC工程文件...

IntersectRect(...)

  这个API可以使用在标准Windows下。作用是判断两个长方形之间是否有重叠的区域。它也返回真或假显示重叠的状况。长方形数据类型是的一个Win32 SDK声明了的标准的数据类型,使用四个整数来描述一个长方形区域。 它们是left, top, right, bottom。类型声明如下:

type _tagRECT
{
int left, top, right, bottom;
} RECT;


<图7 两个矩形是否有重叠?>

  我一直使用这种很典型的方法来快速的进行常规的碰撞检查。

  检测距离的方法。前面的方法都是用来检查一个点是否在一个规定的矩形范围中。如果你的游戏中有两个圆形对象。并且你想知道对象A到对象B有多远,你该怎样做才能得到他们之间的距离呢?如果这个距离小于两对象的半径之和,说明这两个对象是重叠的。下面的图形象我们说明了判断两个对象之间的距离是很容易的,我们的算法是: c2 = a2 + b2.



<图8-距离检测>

  A = p1.x - p2-x;
  B = p1.y - p2.y
  C = sqrt(A*A+B*B);

  假定R1是蓝圆的半径,R2是红圆的半径,如果C小于R1和R2的和,说明两个圆是重叠在一起的。

  让我们想一下星际航行的游戏,用一个圆表示行星,用一个圆表示太空船,然后碰撞检查,在两个对象之间进行简单地计算距离。



<图9 Asteroid游戏>

  高级方法 - 精灵的重叠判断。

  现在的2D游戏的特色是有许多形状差别很大的精灵。为了节约计算时间,我们需要一个超越第一种方法的解决方案,应用到每对象类型。在我的射击游戏中,我用一个特殊方法来检查子弹和其他的对象是否发生碰撞。因为,子弹是很小的并且快速移动的。我同样也用特殊的方法来检查两个精灵对象之间是否发生碰撞。因为,他们又太大了。

  基本思路:首先我用了一个对象把精灵对象的边界进行封装。然后使用快速的边界重叠的方法来进行碰撞检查。如果对象边界是不重叠的,则说明对象没有被击中。如果边界发生重叠,说明对象被击中了。见下图。我们需要使用一种高明的检查方法,计算所有重叠象素。

  1、如果对象边界正在重叠

  2、是,计算重叠的区域, 转到步骤4

  3、没有,没重叠,退出判断

  4、在重叠的长方形中计算真实的重叠形状

  5、计算重叠的象素

  6、返回重叠的象素的数字



<图10 精灵击中测试>



 


共2页。 9 1 2
共2页。 9 1 2
网友关注
最新上市
编辑推荐
文章阅读排行
周排行
月排行
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml