Chinaunix首页 | 论坛 | 博客
  • 博客访问: 845970
  • 博文数量: 756
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 4980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:40
文章分类

全部博文(756)

文章存档

2011年(1)

2008年(755)

我的朋友

分类:

2008-10-13 16:09:36

我原来就看过一些关于2D游戏碰撞检测的文章,今天又看过发表的随笔,实在是憋不住了,发表一点自己的见解,如果有错误还希望大家指出。(我不知道这种方法是否有人使用过,至少我没看见过类似的文章)

以前看到的文章都是写那些简单碰撞的文章,比如两个圆形的子弹相碰、圆形的子弹和方形、三角形的飞机相碰等等,这些碰撞的检测自然不是很复杂,用简单的数学知识就能搞定;但是像那些复杂的几何图形这个方法就不好用了,也许需要写上一大堆的方程来进行计算,而且很可能会影响到整个程序的效率。

有一天我和一位研究过编程的同学在一起,顺便问了一下,他开玩笑的说,用眼睛看呗。当时我灵光一闪,是啊,为什么非要用数学方法呢?通过一段时间的考虑,我想出了一个检测小物体和形状复杂的物体间碰撞的方法。

比如,在屏幕上有一个五角星形状的物体,还有一颗圆形的子弹(大小可以忽略的那种),要检测它们是否发生了碰撞,可以先将五角星绘制在屏幕上(假设背景为黑色,五角星不带黑色),然后取得子弹的当前坐标,判断屏幕上该处的颜色值,如果为黑色,就证明子弹没有撞上五角星,反之则证明两者相撞。

但是后来我想,这个方法的可行性还是很差的,因为游戏的背景通常是经过多种渲染的,不可能为单一的颜色,于是我就此问题对这个方法进行了改进。

我们可以另建一个绘图屏幕,取用单一的背景色,绘制五角星的时候对两块区域进行相同的操作,这样碰撞的检测就不会有问题了。

基于这个思想,我们还可以做更多的改进,比如绘制到后台屏幕时,黑白两色就可以搞定,这样可以节省空间;或者对于不同的对象用不同的颜色,在碰撞检测的同时就能知道是哪个对象触发了碰撞事件。

对于两个复杂图形的碰撞问题,可以用相似的方法进行扩展,相信大家能想出高效的算法。

posted on 2005-03-16 19:37 咸蛋的Blog 阅读(5424)   

--------------------next---------------------

阅读(558) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~