1

我正在创建一个非常基本的 HTML5 游戏,但我似乎无法让碰撞检测正常工作。当子弹与敌人相撞时,子弹被设置为 live 变量被设置为 false,这意味着它不是绘制并且不用于碰撞检测,但它似乎仍然是。这是我的碰撞检测方法

//Collision detection between bullet and enemy
for (var j = 0; j < enemies.length; j++ ) 
{
    for (var i = 0; i < bullets.length; i++ ) 
    {
        if( pointInRect( bullets[i].xPos, bullets[i].yPos, enemies[j].xPos, enemies[j].yPos, 32, 32 ) && ( bullets[i].alive == true ) )
        {
            bullets[i].alive = false;
            enemies[j].xPos = -100;
        }
    }
}

但是当它有时确实与敌人发生碰撞时,只有有时子弹才会继续。谁能看到问题?如果需要,我可以提供更多代码。

帆布

4

1 回答 1

0

创建子弹时。它使用了一个回收系统,有人在 stackoverflow 上帮助了我。但是我们忘记检查第一次创建,这里是代码

    for (var i = 0; i < bullets.length; i++ ) 
    {
        if ( ! bullets[i].alive && ! bulletDone ) 
        {
            bulletDone = true;
            bullets[i] = new Bullet( player.xPos + 14, player.yPos);
            console.log( "Bullet created" );
        }
    }

    if ( ! bulletDone ) 
    {
        bullets[bullets.length] = new Bullet( player.xPos + 14, player.yPos);
        console.log( "Bullet created" );
    }

基本上是线

if ( ! bullets[i].alive && ! bulletDone ) 

曾是

if ( ! bullets[i].alive) 

所以即使一颗子弹没有生命,它仍然会创建一个新子弹,然后产生两颗子弹。

于 2013-07-25T21:43:16.253 回答