|
IntersectRect()
我在碰撞检测中使用了这个函数,
一共用了两次,一次是子弹对敌机的检测,一次是战机对敌机的碰撞检测。
结果是子弹对敌机的检测成功,战机对敌机的碰撞检测失败。
但是有一个问题就是当战机对敌机发生重叠时发射子弹,战机对敌机的碰撞检测就会发生。同时在战机对下一个敌机的碰撞检测有很大的概率是成功的。
很糊涂,现在附上检测部份的代码,请高手指教。
谢谢!
//处理游戏逻辑
void ::ProcessGameLogic(void)
{
int i=0;
RECT R_bullet,R_Fly,R_FlyA;
RECT rcTmp,rcTmp1;
do{
if(BulletNum[i] == 1)
{
R_bullet.left = ::bullet1[i].x_Bullet_Place;
R_bullet.top = ::bullet1[i].y_Bullet_Place;
R_bullet.right = ::bullet1[i].x_Bullet_Place+ 39;
R_bullet.bottom = ::bullet1[i].y_Bullet_Place+ 49;
R_Fly.left = ::Fly_B[0].x_Fighter_Place;
R_Fly.top = ::Fly_B[0].y_Fighter_Place;
R_Fly.right = ::Fly_B[0].x_Fighter_Place + 35;
R_Fly.bottom = ::Fly_B[0].y_Fighter_Place + 35;
if(IntersectRect(&rcTmp,&R_Fly,&R_bullet))
{
::Fly_B[0].CampMap = 2;
BulletNum[i] = 0;
}
}
i++;
}while(i <= BulletMaxNum && Fly_B[0].CampMap == 0);
R_FlyA.left = ::Fly_A.x_Fighter_Place;
R_FlyA.top = ::Fly_A.y_Fighter_Place;
R_FlyA.right = ::Fly_A.x_Fighter_Place + 50;
R_FlyA.bottom = ::Fly_A.y_Fighter_Place + 60;
if( Fly_B[0].CampMap == 0)
{
if(IntersectRect(&rcTmp1,&R_Fly,&R_FlyA))
{
::Fly_B[0].CampMap = 2;
::Fly_A.x_Fighter_Place = 40;
::Fly_A.y_Fighter_Place = 300;
}
}
}
|
|