SDL 2子弹碰撞不起作用?

时间:2014-03-22 13:27:11

标签: sdl collision detection bullet

我是SDL 2的新手,我一直坚持在子弹和宇宙飞船之间进行碰撞检测。

我理解发生了什么,但是我对与什么发生碰撞以及将代码放在哪个方面感到困惑。碰撞检测不起作用,我做出的其他一些尝试导致子弹在宇宙飞船y坐标处消失,即使它位于屏幕的另一侧!我基于一个懒惰的foo教程。

我的整个代码在这里:http://codepad.org/YaCavBvm

基于LazyFoo的碰撞检测:

//sides of sprite rectangles
int leftBullet, leftEnemy;
int rightBullet, rightEnemy;
int topBullet, topEnemy;
int bottomBullet, bottomEnemy;

//Calculate the sides of bullet
leftBullet = posBullet.x;
rightBullet = posBullet.x + BULLET_WIDTH;
topBullet = posBullet.y;
bottomBullet = posBullet.y + BULLET_HEIGHT;

//Calculate the sides of enemy
leftEnemy = posEnemy.x;
rightEnemy = posEnemy.x + SPRITE_WIDTH;
topEnemy = posEnemy.y;
bottomEnemy = posEnemy.y + SPRITE_HEIGHT;

for (int i=0; i<MAX_BULLETS; i++)
{
    if (topBullet == bottomEnemy)
    {
        arrayofBullets[i].isActive = false;
    }
}

1 个答案:

答案 0 :(得分:1)

从理论上讲,放下脚底的子弹很受欢迎,但你可以将其视为击中或失误。请尝试以下

if (topBullet >= topEnemy &&
    bottomBullet <= bottomEnemy &&
    leftBullet >= leftEnemy &&
    rightBullet <= rightEnemy)
    // What happens when the bullet hits

这将处理部分命中。 lazyfoo中的一个是针对一个特例,在示例的上下文中是正确的。