希望您一切都好。我是JavaScript新手,正在从事游戏。一艘船向外星飞船射击,但有一个障碍。除了不起作用时,销毁功能可以完美地起作用。如果我发射激光武库,这些船会奇迹般地在弹幕中幸存下来,直到被最后一个激光击中。当外星人的手碰到任何激光时,我需要触发破坏功能的帮助。下面是相关的代码(我认为),并且有一个指向jsfiddle的链接。 http://jsfiddle.net/235mX/

function drawLaser(){
laserList.forEach(function(Laser){
                Laser.y = Laser.y - 1;
                Ly = Laser.y;
                Lx = Laser.x;
                ctx.beginPath();
                ctx.fillStyle = Laser.color;
                ctx.arc(Laser.x, Laser.y, 10, 2 * Math.PI, false);
                ctx.fill();
                ctx.closePath();

                ctx.beginPath();
                ctx.fillStyle = 'white';
                ctx.arc(Laser.x, Laser.y + 10, 10, 2 * Math.PI, false);
                ctx.fill();
                ctx.closePath();
            });
        }


                                if(Lx >= Ax - 30 && Lx < Ax + 30 && Ly < Ay + 30 && Ly > Ay + 10){
                    destroyX = Lx;
                    destroyY = Ly;
                    enemy1 = 0;
                    destroy();

                }
                if(Lx >= Ax + 100 - 30 && Lx < Ax + 100 + 30 && Ly < Ay + 30 && Ly > Ay + 10){
                    destroyX = Lx;
                    destroyY = Ly;
                    enemy2 = 0;
                    destroy();

                }
                if(Lx >= Ax + 200 - 30 && Lx < Ax + 200 + 30 && Ly < Ay + 30 && Ly > Ay + 10){
                    destroyX = Lx;
                    destroyY = Ly;
                    enemy3 = 0;
                    destroy();

                }
                if(Lx >= Ax + 300 - 30 && Lx < Ax + 300 + 30 && Ly < Ay + 30 && Ly > Ay + 10){
                    destroyX = Lx;
                    destroyY = Ly;
                    enemy4 = 0;
                    destroy();
                }

最佳答案

那是因为您的碰撞检测不会检查每个与每个激光发生碰撞的敌人。它仅通过检查全局变量LxLy对照最后一个激光器检查它们。要解决此问题,您需要将碰撞检测代码包装到另一个laserList.forEach(function(Laser){中,以便将每个敌人的位置与每个激光器的位置进行比较。

当您不使用全局变量时,您可能会更早发现该错误。您可以在本地范围内定义变量,方法是在其前面加上关键字var。我建议您使用use strict mode禁用隐式变量创建。

关于javascript - js Canvas 发射无用的激光,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20779465/

10-09 14:22