2016-12-29 4 views
0

Я делаю маленький платформер. Я могу сделать стрельбу игрока вправо, но когда я пытаюсь сделать так, чтобы стрелять в направлении, в котором игрок «смотрит», повернуть в другую сторону, пули меняют свое направление тоже, вот мой FiddleИзменение направления пули, основанного на обращении игрока

if(keys[13] &&Date.now()-lastFire>100){ 

    bullets.push({ 
     x:player.x, 
     y:player.y, 
     }); 

    lastFire = Date.now(); 
} 
for (var i=0;i<bullets.length;i++){ 

    ctx.beginPath(); 
    ctx.arc(bullets[i].x,bullets[i].y,2,0,Math.PI*2); 
    ctx.fill(); 
    if(facingRight & !facingLeft){ 
     bullets[i].x+=10; 
    } 
    else if(!facingRight & facingLeft){ 
     bullets[i].x-=10; 
    } 


} 

ответ

0

Вы обновляете положение всех пуль на основе направления игрок сталкивается. Если вы хотите сохранить направление, в котором находится каждая пуля, вы должны сохранить ее для каждой пули.

магазин изменение позиции (dx) при создании пули:

bullets.push({ 
    x: player.x, 
    y: player.y, 
    dx: facingLeft ? -10 : 10 
}) 

Draw и обновить все пули с помощью:

bullets.forEach(function (bullet) { 
    ctx.beginPath(); 
    cts.arc(bullet.x, bullet.y, 2, 0, Math.PI*2); 
    ctx.fill(); 
    bullet.x += bullet.dx 
}) 

Примечание: Вы используете & побитового и вместо &&, который вы, вероятно, собираетесь использовать.

Примечание 2: Вы, вероятно, следует хранить направление, в котором игрок сталкивается в одной переменной:

var LEFT = 1 
var RIGHT = 2 
var playerFacing = LEFT 
+0

Спасибо за ответ, но это не работает для меня, игра зависает, когда я пытаюсь стрелять. – Vuxer

+0

https://jsfiddle.net/mf9tg83p/ – Mick

+0

Оххх ... Большое вам спасибо, теперь это работает! – Vuxer

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