【问题标题】:Calculate a path from one object to another and move along it?计算从一个对象到另一个对象的路径并沿着它移动?
【发布时间】:2023-03-07 01:19:01
【问题描述】:

假设我有一个这样的对象......

var objA = {
    x:0,
    y:0,
    speed:{x:0, y:0},
    angle:0,
    turnSpeed:8
}

...我在游戏中的每个“步骤”都想将其移向位于坐标 (10, 10) 处的 objB。 ObjA 已经在移动,突然需要移动到 objB 的位置。假设 objA 有一个函数 turnTo(),它可以根据其 turnSpeed 每一步将其转向 objB。我可以做类似...

objA.speed.x += Math.cos((90 - obj.angle) * Math.PI / 180);
objA.speed.y += -Math.sin((90 - obj.angle) * Math.PI / 180); 

...根据角度将 objA 移向 objB,但如果 objA 已经在移动,则不太可能撞到 objB,因为这没有考虑 objA 当前的速度。

如何计算到 objB 的路径,以便 objA 准确命中它?

【问题讨论】:

    标签: javascript jquery canvas


    【解决方案1】:

    首先看一下Coordinates for my Javascript game - based on an angle, when do I use Sin Cos and Tan?

    您知道 objB 的 x 和 y 坐标(我假设它们保持不变)并且您可以使用 JavaScript 获取 objA 的 x 和 y 坐标,因此您可以将问题解决为从 objA 到 objB 的任意点的三角形简单的触发。

    【讨论】:

    • 是的,但如果 objA 已经在移动,仅此一项不会让 objA 变为 objB。您可以看到fiddle 中发生了什么。
    • 这可以给你所需的角度和 objA 与 objB 碰撞的距离。
    • 好的,使用角度和距离,你会如何接近它?
    • 当 turnTo() 被调用足够长的时间来计算它撞击 objB 所需的角度时,我会停止 objA,然后继续它的移动。
    • 所以我想我真正要问的是如何计算所需的角度。我了解触发,但我不确定如何补偿速度,并且我看不出暂时停止物体将如何帮助,因为它必须在之后保持该速度。我会提出一个新问题,因为这有点冗长。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多