|
发表于 2003-9-9 10:07:00
|
显示全部楼层
Re:请问高手们判断碰撞问题有哪几种常用方法?
3D不懂,2D的碰撞我是这样做的:
/*===============================================================================
名称: HitUnMovableTest
描述: 判断当前移动对象按当前方向移动nSpeed的距离后是否会与指定物体相碰
返回值:FALSE 不会碰到 TRUE 碰到某物体
===============================================================================*/
BOOL CStage::HitUnMovableTest( INT x, //被测对象X坐标
INT y, //被测对象Y坐标
INT width, //被测对象宽度
INT height, //被测对象高度
INT nPassRate, //被测对象通过率
CUnMovable *object //障碍物对象指针
)
{
INT nPassPixelWidth = width*nPassRate/100; //根据通过率计算相应的象素(宽度)
INT nPassPixelHeight = height*nPassRate/100; //根据通过率计算相应的象素(高度)
if( ( y + height - nPassPixelHeight > object->GetY()) //目标不在测试矩形的上方
&& ( y + nPassPixelHeight < object->GetY() + object->GetHeight() ) //目标不在测试矩形的下方
&& ( x + width - nPassPixelWidth > object->GetX() ) //目标不在测试矩形的左方
&& ( x + nPassPixelWidth < object->GetX() + object->GetWidth()) ) //目标不在测试矩形的右方
return TRUE;
else
return FALSE;
}
另外,我测试了以下,简单的函数调用需耗10个左右的CPU时间单位(不知道QueryPerformanceCounter取的值可不可以这样叫),而赋值语句大约耗1个CPU时间单位,所以在循环里尽量减少各种Get方法可以提高一些速度。(我的C++版小游戏比C版的慢一半以上,可能也是由于对象方法滥用所置,但我想不出什么好方法,郁闷啊 )
碰撞测试非常影响游戏速度,哪位朋友有好的算法还望赐教。
|
|