javascript - 以角度拍摄最后一个位置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 ;
}
}
解决方案
计算角度和 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 ;
}
}
推荐阅读
- ruby-on-rails - 脏(已更改)属性:从什么时候开始更改集字符串中的值(而不是对象)?
- c# - 打开约会项目时显示自定义任务窗格(会议发生和个人会议)
- javascript - Node js和chart js数据可视化
- woocommerce - 仅针对 Woocommerce 上的特定产品 ID 自动完成付费订单
- html - Django 嵌套视图
- visual-studio - 发布过程在 Visual Studio 2017 中花费了太多时间
- tensorflow - 如何在 Tensorflow Serving 中为 TensorRT 模型配置 ModelConfig.txt
- amazon-web-services - ECS 从 AL1 迁移到 AL2 - ECS 服务未启动
- forms - 将已编译绑定与 Prism 一起使用
- wordpress - 如何在 WordPress 网站后台播放广播?