【问题标题】:JavaScript Collision Detection doesn't seem to be working?JavaScript 碰撞检测似乎不起作用?
【发布时间】:2014-03-15 04:02:38
【问题描述】:

所以我试图在我的 Alien Invaders 再现中设置碰撞检测。但它几乎不起作用。几乎我的意思是我从来没有得到有效的点击,或者true返回。我什至尝试了很多不同的方法,但无论出于何种原因,我都无法得到正确的答案。

碰撞检测用于玩家向外星飞船发射子弹,只是为了澄清,如果重要的话:D。

这是碰撞检测代码:(我试图让它容易出错,希望能成功,尽管似乎没有任何方法有效)

var isCollidingWithAlien = function(shot){
    var alienImg = document.getElementById('alien');
    for(var i = 0; i < aliens.length; i++){
        return shot.x               < aliens[i].x + alienImg.width  && 
        shot.x + shot.img.width     > aliens[i].x                   &&
        shot.y                      < aliens[i].y + alienImg.height && 
        shot.y + shot.img.height    > aliens[i].y;
    }
};

不是代码没有被调用,也不是一些奇怪的技术错误。它永远不会返回 true。

另外如果你想查看所有代码,这里是JSFiddle

@更新: 一直在玩代码,它似乎正确注册了第一个创建的 Alien,如果您查看 JSFiddle,它位于左上角。不知道为什么

【问题讨论】:

    标签: javascript animation canvas collision-detection


    【解决方案1】:

    问题是,您只为列表中的第一个外星人返回碰撞。如果你对某个外星人为真,你应该返回真,或者在所有外星人没有碰撞之后返回假:

    var isCollidingWithAlien = function(shot){
        var alienImg = document.getElementById('alien');
        for(var i = 0; i < aliens.length; i++){
            var result = shot.x         < aliens[i].x + alienImg.width  && 
            shot.x + shot.img.width     > aliens[i].x                   &&
            shot.y                      < aliens[i].y + alienImg.height && 
            shot.y + shot.img.height    > aliens[i].y;
            if(result)
                return true;
        }
        return false;
    };
    

    【讨论】:

    • 这很有意义!我不敢相信它是如此明显!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多