【问题标题】:SDL 2 bullet collision not working?SDL 2 子弹碰撞不起作用?
【发布时间】:2014-03-22 13:27:11
【问题描述】:

我是 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;
    }
}

【问题讨论】:

    标签: sdl collision detection bullet


    【解决方案1】:

    理论上,子弹擦过您的脚底是命中,但您可以将其视为命中或未命中。试试下面的

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多