gpt4 book ai didi

LibGDX 指导—— Sprite 追踪 2D 无限随机贝塞尔曲线

转载 作者:行者123 更新时间:2023-12-01 11:50:36 25 4
gpt4 key购买 nike

我已经能够为我的 Sprite 应用平滑的动画并使用加速度计控制它。我的 Sprite 固定沿着 x 轴左右移动。

从这里开始,我需要弄清楚如何为 Sprite 创建一条垂直的无限波浪线以尝试追踪。我的游戏的目的是让用户使用加速度计控制 Sprite 的左/右运动,以尽可能地追踪永无止境的波浪线,而 Sprite 和相机都在垂直方向上移动以模拟“移动沿着这条线。”如果线条是随机生成的,那将是理想的。

我研究过样条、平面、贝塞尔曲线等,但我找不到任何似乎与我想要实现的目标足够接近的东西。

我只是在寻求一些指导,以了解我可以使用哪些方法来实现这一目标。有什么想法吗?

最佳答案

您可以使用 4 到 5 个正弦波的总和(每个正弦波具有不同的振幅、波长和相位差)。所有这 3 个参数都可以是随机的。

生成的曲线将非常平滑(因为它主要是正弦曲线)但它看起来是随机的(它的时间周期将是所有 4 到 5 个随机波长的 LCM,这是一个巨大的数字)。

所以曲线不会长时间重复,但也不难内存。关于计算复杂性,您始终可以通过使用 FPS 更改正弦项的数量来调整它。

它应该是这样的。
enter image description here

它也很容易实现。 (即使我可以生成上面的图像..哈哈)

希望这对您有所帮助。数学摇滚。 :D

(这里的基本思想是一个有限的 Fourier series,我认为这应该是您的用例的理想选择)


编辑:

您可以像这样创建每个术语并为所有术语分配随机值。

public class SineTerm {

private float amplitude;
private float waveLength;
private float phaseDifference;

public SineTerm(float amplitude, float waveLength, float phaseDifference) {
this.amplitude = amplitude;
this.waveLength = waveLength;
this.phaseDifference = phaseDifference;
}

public float evaluate(float x) {
return amplitude * (float) Math.sin(2 * Math.PI * x / waveLength + phaseDifference);
}

}

现在创建一个 SineTerm 数组,并添加 evaluate(x) 返回的所有值(使用 Sprite 的一个坐标作为输入)。使用输出作为 Sprite 的其他坐标。你应该可以开始了。

真正的诀窍在于调整这些随机数。

祝你好运。

关于LibGDX 指导—— Sprite 追踪 2D 无限随机贝塞尔曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21980045/

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