使敌人跟随移动玩家的问题
Problems making enemy follow moving player
好的,所以我想做一个javascript/html画布游戏,玩家被一些敌人跟踪,经过一点"研究",她是我的怪物(敌人(类中最重要的部分:
this.UpdateAngle = function() {
this.dx = this.x - player.x;
this.dy = this.y - player.y;
this.angle = Math.atan2(this.dy, this.dx) * 180 / Math.PI;
if (this.angle < 0) {
this.angle += 2 * Math.PI;
}
}
this.UpdateSpeed = function() {
this.speedX = this.speed * Math.cos(this.angle);
this.speedY = this.speed * Math.sin(this.angle);
}
this.Move = function() {
this.UpdateAngle();
this.UpdateSpeed();
this.x += this.speedX;
this.y += this.speedY;
}
所以我在这里要做的是,用atan2()
计算从敌人到玩家的角度,然后用cos()
和sin()
计算我应该在x和y轴上移动多少,我计算的速度和角度,然后移动计算出的像素。
这一切似乎都很好,直到我移动玩家,然后敌人开始向奇怪的方向移动。我不知道出了什么问题,如果有人能告诉我这是怎么做的,那就太棒了。:D
你可以在这里看到它的实际效果。 *我已经根据总理布罗曼诺夫的建议更新了代码。
它可能与此块有关
this.angle = Math.atan2(this.dy,this.dx) * 180 / Math.PI;
if (this.angle < 0) {
this.angle += 2 * Math.PI;
您正在使用以弧度为单位输出角度的Math.atan2
,然后使用 * 180 / Math.PI;
转换为度数 之后,您检查它是否小于零并将 2Pi 添加到角度以确保它正确计算出它的实际角度 一整圆减去角度。但是,您在这里使用的是弧度而不是度。因此,当你的代码是负数时,你会在度数上添加 2Pi,这不是很多,但有时会导致它变成正数。这就是为什么当你移动时你的点在旋转。如果您注意到,当您离得更远时,点旋转得更慢,这意味着负角度大于 2Pi,因此不会立即盘旋。
简而言之,尝试将其更改为此
if (this.angle < 0) {
this.angle += 360;
}
好的,所以实际上是布罗曼诺夫总理回答了这个问题,谢谢,但我不能接受评论,确实如此,所以我这样做是为了更清楚地说明,如果有人应该过来也想要答案。我做的数学有点错误,这是我的代码最终的样子:
this.UpdateAngle = function() {
this.dx = player.x - this.x;
this.dy = player.y - this.y;
this.distance = Math.sqrt((this.dx*this.dx) + (this.dy*this.dy));
this.angle = Math.atan2(this.dy,this.dx) * 180 / Math.PI;
}
this.UpdateSpeed = function() {
this.speedX = this.speed * (this.dx/this.distance);
this.speedY = this.speed * (this.dy/this.distance);
}
this.Move = function() {
this.UpdateAngle();
this.UpdateSpeed();
this.x += this.speedX;
this.y += this.speedY;
}
再次感谢布罗曼诺夫总理,这是他的回答,也感谢其他人,这是我的第一篇文章,我很高兴我得到回复的速度有多快!(我是这里最慢的一个(:D
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 如何解决Yii中的页面刷新问题
- Safari(Mac OS)上的jQuery平滑滚动问题
- jqGrid树网格问题
- 使用正则表达式评估电子邮件地址时出现性能问题
- 如何消除代码中的未定义和其他问题
- JavaScript代码问题:我正在将对象转换为数组
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- 由于iframe导致的问题
- 使敌人跟随移动玩家的问题
- if语句将类为"is inactive"的玩家添加到输入中时出现问题