我已经能够将平滑的动画应用于我的精灵并使用加速度计控制它。我的精灵固定为沿 x 轴左右移动。
从这里开始,我需要弄清楚如何创建一条垂直的无限波浪线供精灵尝试追踪。我的游戏的目的是让用户用加速度计控制精灵的左/右移动,试图尽可能地追踪永无止境的波浪线,同时精灵和相机都沿垂直方向移动以模拟“移动”沿线。”如果这条线是随机生成的,那就更理想了。
我研究过样条线、平面、贝塞尔曲线等,但我找不到任何与我想要实现的目标足够接近的东西。
我只是在寻求一些关于我可以使用什么方法来实现这一目标的指导。有任何想法吗?
您可以使用 4 到 5 个正弦波的总和(每个正弦波具有不同的幅度、波长和相位差)。所有这 3 个参数都可以是随机的。
得到的曲线将非常平滑(因为它主要是正弦曲线),但它看起来是随机的(它的时间周期将是所有 4 到 5 个随机波长的 LCM,这是一个巨大的数字)。
所以曲线不会长时间重复,但也不难记。关于计算复杂性,您始终可以通过使用 FPS 更改正弦项的数量来调整它。
It should look like this.
它也很容易实现。 (即使我可以生成上面的图像..哈哈)
希望这可以帮助。数学岩石。 :D
(这里的基本思想是有限傅立叶级数 http://en.wikipedia.org/wiki/Fourier_series我认为这应该是您的用例的理想选择)
Edit:
您可以像这样创建每个术语并为所有术语分配随机值。
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
s 并添加所有返回的值evaluate(x)
(使用精灵的一个坐标作为输入)。使用输出作为精灵的其他坐标。你应该可以走了。
真正的技巧是调整这些随机数。
祝你好运。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)