javascript - 对象在与其他对象发生碰撞之前不会被移除

标签 javascript html html5-canvas

我正在创建一个非常基本的 HTML5 游戏,但我似乎无法让碰撞检测正常工作。当子弹与敌人碰撞时,子弹被设置为事件变量设置为 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;
        }
    }
}

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

Canvas

最佳答案

创建项目符号时。它使用了有人在 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) 

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

关于javascript - 对象在与其他对象发生碰撞之前不会被移除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17869131/

相关文章:

javascript - 如何在 Javascript 中将 float 转换为其二进制表示形式(IEEE 754)?

java - 在网络爬虫中解析 HTML

javascript - 设置客户端浏览器内存

javascript - React 不会在 map 函数中渲染

javascript - 在 Javascript 上,为什么未使用 bind() 绑定(bind)的函数仍然绑定(bind)到对象?

javascript - 如何固定图像宽度

javascript - 如何根据以前的单选按钮显示一组单选按钮

python - 如何将 Dash 布局保存到 HTML 文件

javascript - image.onload 后变量值无法使用?

javascript - 如何从 Canvas 初始化图像?