gpt4 book ai didi

javascript - 在javascript中水平移动对象的算法

转载 作者:行者123 更新时间:2023-11-28 13:46:21 26 4
gpt4 key购买 nike

我目前正在使用 javascript 和processing.js 开发一款游戏,但在尝试弄清楚如何对 Angular 移动东西时遇到了麻烦。在这个游戏中,中心有一个物体可以射击周围的其他物体。现在,我仅垂直或仅水平移动子弹没有问题,但是我很难实现子弹算法的对 Angular 线运动。

在尝试方面,我尝试戴上数学思维帽并使用 y=mx+b 公式沿直线运动,但这就是我的代码最终的样子:

ellipse(shuriken.xPos, shuriken.yPos, shuriken.width, shuriken.height); //this is what I want to move diagonally

if(abs(shuriken.slope) > 0.65) {
if(shuriken.targetY < shuriken.OrigYPos) {
shuriken.yPos -= 4;
} else {
shuriken.yPos += 4;
}
shuriken.xPos = (shuriken.yPos - shuriken.intercept)/shuriken.slope;

} else {
if(shuriken.targetX < shuriken.OrigXPos) {
shuriken.xPos -= 4;
} else {
shuriken.xPos += 4;
}
shuriken.yPos = shuriken.slope * shuriken.xPos + shuriken.intercept;
}

上面的代码非常糟糕和hacky,因为速度随着线的斜率而变化。

我尝试实现三 Angular 关系,但仍然徒劳。

任何帮助/建议将不胜感激!

最佳答案

这样想:您希望手里剑移动 s 个像素。如果运动是水平的,它应该水平移动 s 个像素;如果是垂直的,则为垂直 s 像素。但是,如果是其他内容,它将是水平/垂直像素的组合。什么是正确的组合?那么,如果从给定点向任意方向投影 s 距离,会得到什么形状?没错,就是一个半径为 s 的圆。让我们用 Angular 来表示方向,a。所以我们有这张图片:

image

我们如何获得xy?如果你注意到的话,我们有一个三 Angular 形。如果您还记得三 Angular 函数,这正是正弦、余弦和正切函数的用途。我通过助记符 SOHCAHTOA 了解了它们的定义。即:Sin (a) = 对边/斜边,Cos(a) = 邻边/斜边,Tan(a) = 对边/邻边。在这种情况下, Angular a的对 Angular 是y, Angular a的邻 Angular 是x。因此我们有:

cos(a) = x / s
sin(a) = y / s

求解xy:

x = s * cos(a)
y = s * sin(a)

因此,给定 Angular a,并且您想要移动手里剑 s 像素,您需要移动它 s * cos(a) 水平方向和 s * sin(a) 垂直方向。

请确保将弧度(而不是 Angular )的 a 传递给 javascript 的 Math.sinMath.cos 函数:

radians = degrees * pi / 180.0

这可能就是为什么你的三 Angular 解决方案不起作用,因为这在过去让我深受困扰。

关于javascript - 在javascript中水平移动对象的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14088489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com