Съемка под углом к ​​последней позиции html5 canvas js - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь сделать игру, в которой пули будут выпущены в последнюю точку цели.Пули должны попадать в цель, если цель не движется.Каждая пуля должна непрерывно двигаться в одном направлении, используя последний рассчитанный угол.

for (var z=0; z < this.bullets.length; z++){  

var by = enemy1.y - posY;  
var bx = enemy1.x - posX;  
var fangle = Math.atan2 (by, bx);  


velocitiesx[z] = Math.cos(fangle) * 1;  
velocitiesy[z] = Math.sin(fangle) * 1;  


bullets[z].x += velocitiesx[z] ;  
bullets[z].y += velocitiesy[z] ;   
}

Вот моя проблема: когда цель не движется, пули правильно попадают в цель.Однако, когда стрелок движется, но цель все еще, все пули пропускают - но все эти пули должны поразить неподвижную, неподвижную цель.

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

изменено на (все та же проблема):

function fire(){
counter++;
if (37 in keys && counter >= firerate ) {
var by = enemy1.y - posY;
var bx = enemy1.x - posX;
var fangle = Math.atan2 (by, bx);
velxf = Math.cos(fangle) * 1;
velyf = Math.sin(fangle) * 1;


bullets[bullets.length] = new Box({
  x: posX  ,
  y: posY ,
  width: 4,
  height: 4,
  color: '#7FFF00',
 });
counter = 0;

}}

function movebullets(){
for (var z=0; z < this.bullets.length; z++){
bullets[z].x += velxf ;
bullets[z].y += velyf ; 
}    
}

1 Ответ

0 голосов
/ 20 мая 2018

вычислил угол и velxf и velyf в огне .... и сделал velxf и velyf свойства коробки, как предложено kokodoko

bullets[bullets.length] = new Box({
  x: posX  ,
  y: posY ,
  width: 4,
  height: 4,
  color: '#7FFF00',
  velxb: velxf,
  velyb: velyf,
});




function movebullets(){
for (var z=0; z < this.bullets.length; z++){

bullets[z].x += bullets[z].velxb ;
bullets[z].y += bullets[z].velyb ; 
}         
}
...