我没有得到C ++中基本矩形冲突实现的预期反馈

时间:2017-11-12 16:46:16

标签: c++

嗨我正在构建一个基本游戏,我必须检测一系列精灵之间的碰撞。现在,精灵只是向前移动并随机改变方向或到达屏幕边缘时。这个游戏是用我的大学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的时间内运行。

0 个答案:

没有答案