嗨我正在构建一个基本游戏,我必须检测一系列精灵之间的碰撞。现在,精灵只是向前移动并随机改变方向或到达屏幕边缘时。这个游戏是用我的大学graphich库用C ++制作的。
我实现了一个基本算法来检测碰撞到这个函数:
bool DetectarColisionTanques(strTanque tanque1, strTanque tanque2) {
if(
(tanque1.px + tanque1.width >= tanque2.px) &&
(tanque1.px <= tanque2.px + tanque2.width) &&
(tanque1.py + tanque1.height >= tanque2.py) &&
(tanque1.py <= tanque2.py + tanque2.height)
) {
return true;
} else {
return false;
}
}
很抱歉代码是西班牙语,tanque1和tanque2是包含每个精灵坐标的2个结构,我想看看是否碰撞,px和py是图像左上角的精灵原点。
但是当我尝试运行该功能时,我没有得到预期的反馈:
void MoverEnemigos(){
for (int i=0;i<nEnemigos;i++) {
switch (enemigos[i].dir) {
case 0: enemigos[i].py-=enemigos[i].vel;break;
case 1: enemigos[i].px+=enemigos[i].vel;break;
case 2: enemigos[i].py+=enemigos[i].vel;break;
case 3: enemigos[i].px-=enemigos[i].vel;break;
for (int k= i+1; k<nEnemigos; k++) {
if(DetectarColisionTanques(enemigos[i],enemigos[k])) {
printf("Collision detected");
printf("\n");
}
}
}
enemigos[i].width= esat::SpriteWidth(spriteTanque[enemigos[i].dir]);
enemigos[i].height= esat::SpriteHeight(spriteTanque[enemigos[i].dir]);
}
}
在这个名为MoverEnemigos()的函数中,我根据它们的方向移动所有精灵px和py,然后我尝试调用函数DetectarColisionTanques()来查看我在图形窗口中看到的同时是否得到了printf精灵明显在相撞。但我从来没有得过printf。
PD:所有功能都在60fps的时间内运行。