Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 僵尸游戏-碰撞检测问题_Javascript_Jquery_Html_Collision Detection - Fatal编程技术网

Javascript 僵尸游戏-碰撞检测问题

Javascript 僵尸游戏-碰撞检测问题,javascript,jquery,html,collision-detection,Javascript,Jquery,Html,Collision Detection,这就是我正在做的。您可以使用箭头键移动,空格键进行拍摄。 我正在测试Chrome 我试图用子弹击中僵尸潜水舱来进行碰撞检测 setInterval(function(){ var z = $(".zombie"); var zoff = z.offset(); var zleft = zoff.left; var b = $("#bullet"); var boff = b.offset(); var bleft = boff.left; if

这就是我正在做的。您可以使用箭头键移动,空格键进行拍摄。 我正在测试Chrome

我试图用子弹击中僵尸潜水舱来进行碰撞检测

setInterval(function(){
   var z = $(".zombie");
   var zoff = z.offset();
   var zleft = zoff.left;

   var b = $("#bullet");
   var boff = b.offset();
   var bleft = boff.left;
      if (localStorage.getItem('facing') == "right") {
          if (bleft >= zleft) {
              $("#zombie").remove()
              $("#bullet").remove()
            }  
            }else if (localStorage.getItem('facing') == "left") {
                if (bleft <= zleft) {
                $("#zombie").remove()
                $("#bullet").remove()
            }
      }

      },1);

我的问题是,子弹是按照僵尸繁殖的顺序取出僵尸的,这是因为使用的选择器将只取具有该ID的第一个元素。您需要做的是使用一个选择器来查找所有僵尸并检查是否每个僵尸都被击中,然后移除该僵尸,而不是只检查第一个僵尸

使用var z=$.zombie;要选择所有具有类zombie的元素,而不是那些具有该ID的元素,请查看以下内容以了解其余元素:

如果你仍然有问题,我可以试着为你发布更多的代码,但先试试;到目前为止,这个游戏看起来很酷

编辑:好的,看看你更新的代码,问题是你在尝试将整个列表与项目符号进行比较后,使用每个来选择和删除所有僵尸。 此代码将删除所有僵尸,无论发生什么情况:

$('.zombie').each(function () {
    $(this).remove()
})
您真正需要做的是选择所有僵尸,然后使用每个僵尸循环遍历僵尸列表,并将每个僵尸与项目符号进行一次比较,只有在发生冲突时才将其删除。类似的内容应该作为setInterval的内容,不过您可能需要对其进行一些调整:

var b = $("#bullet");
var boff = b.offset();
var bleft = boff.left;
$('.zombie').each(function () {
    var z = $(this);
    var zoff = z.offset();
    var zleft = zoff.left;

    if (localStorage.getItem('facing') == "right") {
        if (bleft >= zleft) {
            z.remove()
            b.remove()
            score++
        }
    } else if (localStorage.getItem('facing') == "left") {
        if (bleft <= zleft) {
            z.remove()
            b.remove()
            score++
        }
    }
}

此外,为了优化这一点,您可能希望在循环开始时进行检查,以查看子弹是否已经击中僵尸-如果是这样,循环将不需要继续并运行其余代码。不过,我将把这留给您。

另外,为了正确的语义,他不应该对每个div使用相同的id,也不应该通过id引用它们。他已经为它们分配了类zombie,所以他应该使用$。zombie感谢您指出这一点。我本来打算使用类选择器,但是复制了他的代码,然后忘记了更改!没问题。请务必添加一条简短说明,说明将更改为的原因。在你的解决方案中。好主意。。。完成了,希望就这样-今晚太累了,不能再这样了。谢谢!我把它从改成了。就使用每一种方法而言,我都尝试过,但都失败了。我以前从未使用过它,但我让它删除了最近的一个,但它删除了所有僵尸,因为它们具有相同的类,即使我使用了$this.remove,我更新了站点。使用inspect元素查看更改