我试图制作一个游戏,子弹射击目标的最后位置。除非目标没有移动,否则子弹应该错过目标。每个子弹应使用最近计算的角度连续向单一方向移动。
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 ;
}
}
答案 0 :(得分:0)
计算角度和velxf和velyf着火......并根据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 ;
}
}