首页 > 解决方案 > 以角度拍摄最后一个位置html5 canvas js

问题描述

我正在尝试制作一个游戏,其中子弹射向目标的最后一个位置。除非目标没有移动,否则子弹应该会错过目标。每个子弹应该使用最近计算的角度在一个方向上连续移动。

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 ; 
}    
}

标签: javascripthtmlspriteanglebullet

解决方案


计算角度和 velxf 和 velyf on fire....并按照 kokodoko 的建议制作盒子的 velxf 和 velyf 属性

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 ; 
}         
}

推荐阅读