【发布时间】:2015-02-16 10:59:56
【问题描述】:
好的,所以我想制作一个 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
您可以在here 中看到它。 *我已根据 PremierBromanov 的建议更新了代码。
【问题讨论】:
-
我不知道解决方案(我早就忘记了我曾经知道的三角函数),但作为一种调试方法,我建议在每个实体的当前方向上画一条线运动,以及显示其当前速度的文本。
-
我帮不了你...但是我发现了另一个故障。对不起! :D 如果你水平移动(强制重新计算角度)当你恰好与敌人处于同一高度时,它会开始从你而不是向你运行:)
-
至于找出为什么他们在玩家按下按键时表现怪异的原因......我会添加很多
console.log()调用,每个函数至少一次,可能还有一个每次重新计算 speedX、speedY 或角度时。分析跟踪日志并比较移动时发生的情况。
标签: javascript canvas game-ai