2013-12-26 4 views
1

Надеюсь, у вас все хорошо. Я новичок в JavaScript и работаю над созданием игры. Корабль стреляет на инопланетные космические корабли, но есть загвоздка. Функция уничтожения отлично работает, за исключением случаев, когда это не так. Если я стреляю из своего арсенала лазеров, корабли чудесным образом выживают заграждением, пока не ударят последний лазер. Мне нужна помощь, запускающая функцию уничтожения, когда инопланетные корабли касаются любого лазера. Ниже приведен соответствующий код (я думаю), и есть ссылка на jsfiddle. http://jsfiddle.net/235mX/js canvas стрельба бесполезным лазером

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(); 
       } 
+0

jsfiddle, похоже, не работает для меня. a, d и пробел, похоже, ничего не делают. Я использую Firefox Stable в Windows. – Philipp

ответ

1

Это потому, что ваше обнаружение столкновений не проверяет всех врагов, в результате столкновения с каждым лазером. Он проверяет их только на последнем лазере, проверяя глобальные переменные Lx и Ly. Чтобы устранить проблему, вам необходимо обернуть свой код обнаружения столкновения в другой laserList.forEach(function(Laser){, чтобы каждая позиция противника сравнивалась с положением каждого лазера.

Возможно, вы обнаружили эту ошибку раньше, когда не использовали глобальные переменные. Вы можете определить переменную в локальной области, предварительно присвоив ей ключевое слово var. Я бы порекомендовал вам use strict mode, который отключает создание неявных переменных.

Смежные вопросы