当前位置: 首页 > 知识库问答 >
问题:

在方向上移动时减速

芮念
2023-03-14

以下是您将看到的一些方法的快速描述:

>

  • this.bounds:返回船的边界(一个矩形)
  • this.bounds.getCenter():返回表示船边界中心的Vector2d。
  • getVelSpeed():一个Vector2d,它表示船的速度(每帧添加到位置)
  • new Vector2d(角):一个新的Vector2d,当给定一个角度(以弧度为单位)时,将其标准化
  • Vector2d#插值(Vector2d目标,双倍量):不是线性插值!如果你想看插值代码,这里是(在类Vector2d中):

    public Vector2d interpolate(Vector2d target, double amount) {
       if (getDistanceSquared(target) < amount * amount)
           return target;
       return interpolate(getAngle(target), amount);
    }
    public Vector2d interpolate(double direction, double amount) {
       return this.add(new Vector2d(direction).multiply(amount));
    }
    

    当玩家没有按键时,飞船应该减速。以下是我为此所做的:

    public void drift() {
        setVelocity(getVelocity().interpolate(Vector2d.ZERO, this.deceleration));
    }
    

    然而,现在我意识到我希望它在向目标移动时漂移。我试过这个:

    public void drift(Vector2d target) {
        double angle = this.bounds.getCenter().getAngle(target);
        setVelocity(getVelocity().interpolate(new Vector2d(angle), this.deceleration));
    }
    

    这当然不会真的达到零速度(因为我正在向一个角度向量插值,它的数量级为1)。此外,只有当它变得非常慢时,它才会真正“漂移”到目标的方向。

    关于我如何做到这一点有什么想法吗?我就是搞不懂。这是个大问题,非常感谢。

    这是使用我制作的一个大图书馆,所以如果你有任何关于请问什么的问题,我想我已经涵盖了大部分内容。

  • 共有1个答案

    都博裕
    2023-03-14

    你的插值函数做奇怪的事情。为什么不使用简单的物理模型呢?例如:

    车身具有位置(px,py)和速度(vx,vy),而且单位方向向量(dx,dy)非常方便

    在(小)时间间隔后,dt速度根据加速度变化

    vx = vx + ax * dt
    vy = vy + ay * dt
    

    任何外力(马达)都会引起加速度并改变速度

    ax = forcex / mass  //mass might be 1
    ay = forcey / mass
    

    干摩擦力的大小与速度无关,其方向与速度相反

    ax = c * mass * (-dx)
    ay = c * mass * (-dy)
    

    液体摩擦力的大小取决于速度(不同情况下有许多不同的方程式),其方向与速度相反

    ax = k * Vmagnitude * (-dx)
    ay = k * Vmagnitude * (-dy)
    

    每个时间间隔加上所有的力,得到加速度,得到速度,相应地改变位置

     类似资料:
    • 我刚开始在pygame中学习游戏开发,我希望玩家停止按键时,玩家对象会减速。 这就是我目前的情况: 它在向右移动时工作正常,但在向左移动时对象不会按时停止。相反,它会减速到一个点,然后继续以非常慢的速度行驶一段时间,然后停止。

    • 我想再写一个像Flappy Bird这样的游戏。所以,我有一个身体,与鸟,并设置他的位置在开始在屏幕中部与精灵在上面。现在当用户点击屏幕时,我想把鸟向上移动。但我怎样才能做到呢?身体setTransform(向量、角度)不是我想要的。你能帮我解决这个问题吗?

    • 我在图上实现了一个BFS,其中节点由状态类的对象标记(我实现了一个隐式等于方法进行比较)。 我已经实现了我的队列使用PriorityQueue与一个返回1的比较器,因为我想扩展程序来处理DFS,Astar等,我可以做的只是改变比较器内的逻辑 以下是相关代码: //bfscompariator。JAVA //解算器。JAVA 在遍历列表并打印当前元素时,我发现有些元素没有上移(例如,poll上的{a

    • 问题内容: 因此,这是html代码: And here is css: 因此,我使用margin-top:-10px,但它移动了整个容器,而不仅仅是图像。 问题答案: 这是由于保证金合拢规则。要解决此问题,您可以简单地在元素上使用透明边框: 现在,为什么添加边框会中止边距折叠规则? 这不是防止保证金崩溃的唯一方法。还有其他方法,例如向元素添加填充。 为什么这可以防止利润减少?因为它(元素)与盒子布

    • 我制作了一个身体,我想在点击按钮时移动它,我已经能够使用但它不准确。假设我想以40的线速度移动我的身体7米,我该怎么做? 我可以用身体。setTransform()但我需要身体真正移动,而不是传送。提前谢谢

    • 当我在模拟器的 EditText 中输入文本时,屏幕不会向上移动,因此我看不到我正在输入的内容。 我想附加屏幕截图,但我还没有所需的声誉。 这只是以下代码的问题。 同时,它在同一应用程序的另一个屏幕上运行良好。 工作代码是- 我正在努力找出它为什么不起作用。请帮帮忙!