我是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;
}
}
答案 0 :(得分:1)
从理论上讲,放下脚底的子弹很受欢迎,但你可以将其视为击中或失误。请尝试以下
if (topBullet >= topEnemy &&
bottomBullet <= bottomEnemy &&
leftBullet >= leftEnemy &&
rightBullet <= rightEnemy)
// What happens when the bullet hits
这将处理部分命中。 lazyfoo中的一个是针对一个特例,在示例的上下文中是正确的。