作者F23ko (纯洁)
看板GameDesign
标题Re: [程式] 关於射击游戏子弹与怪物碰撞的运算量
时间Sun Mar 21 14:34:41 2010
借标题问个问题
假设有高速移动的炮弹 (30像素/frame 以上 差不多0.3秒穿越萤幕)
对着另一高速物件射击
要怎麽样才能有效率又保有正确性的计算碰撞呢?
因为,在两个frame间,物体的位置变化很大
用传统的画方格计算,会很容易漏掉
漏掉的状况:
理论上应该要撞到,但每个frame的判断都是没撞到
◎ frame2
↑
│
●──┼─→●frame2
frame1│
│
◎frame1
我自己想两个方法
1.把每秒的计算次数调高,但绘图维持每秒60frame不变
2.数学法,把移动路径算出来,再计算有没有重叠
但都觉得可能会出问题....
请问一般状况下,处理高速碰撞的话,都怎麽解决?
--
◢
乡民啊!乡民! 请告诉我谁是最纯洁的人!
◢█ │
PTT │
██
:就是你!Snow White F23ko!│
█◤ ╯
◤ ﹨(╯▽╰ )∕
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.27.109.99
1F:推 akilight:我之前自己写的射击小游戏是额外做处理 03/21 14:56
2F:→ akilight:简单来讲就是用子弹的位置+前进方向作成一个ray 03/21 14:56
3F:→ akilight:然後用ray来检查路径上有没有穿过物体 03/21 14:56
4F:→ akilight:有的话就判断最近的交叉点,然後抓这个点和子弹的距离 03/21 14:56
5F:→ akilight:如果距离小於子弹一个frame移动的距离,就代表下一f命中 03/21 14:57
6F:→ akilight:接着就是在下一个frame中判断子弹的位置 03/21 15:00
7F:→ akilight:如果子弹和物体的距离足够小,或是已经穿过了就算命中 03/21 15:00
8F:→ F23ko:这方法似乎不错 03/21 16:26
9F:推 akilight:补充一下,这方法在目标物会移动的时候还需要额外做检查 03/21 21:28
10F:→ akilight:在下个f中做一个反向ray,确保目标仍在弹道路径上 03/21 21:28
11F:→ akilight:不然如果目标也在高速移动,很可能就会出现错误命中 03/21 21:29
12F:推 HomeboyWu:把子弹对目标的相对速度方向当ray去检查交叉 03/21 23:57
13F:→ HomeboyWu:就不用额外处理目标会动的状况了 03/21 23:58