我正在尝试开发游戏。
我有一个起点和起始矢量(蓝色),然后我在屏幕上绘制路径(黑色),我想跟随一定的惯性,或每个转弯的有限角度和步骤应该产生一条红线。
您对如何编程此类算法有任何提示吗?
答案 0 :(得分:3)
您可以创建一个差分方案,即离散时刻的源点的模型速度和坐标。例如,假设您修复了一些dt = 0.1 sec
,蓝色矢量的起始速度为v0
。我们从x0
开始。
说y[j]
是黑色路径的点。
让x1 = x0 + v1 * dt
,v1 = v0 + (y[k(x0)+1] - x0) * f(abs(y[k(x0)+1] - x_0))
。凡
k(x0)
是x0
中最接近y[j]
点的索引,
f(x)
是一个表征“力”的函数,将你的轨迹拉到定义的路径。它仅为非负x
es定义。
此模型将您的轨迹拉到定义路径中的下一个点,使其最接近轨迹上当前建模位置。
f(x)
的一个很好的例子可能是建模引力:f(x) = K/(x * x)
,其中K
应通过实验调整,以给出自然的预期结果。
然后x2 = x1 + v2 * dt
,其中v2 = v1 + (y[k(x1) + 1] - x1) * f(abs(y[k(x1) + 1] - x_1))
等等:
x[n+1] = x[n] + v[n+1] * dt
,其中v[n+1] = v[n] + (y[k(x[n]) + 1] - x[n]) * f(abs(y[k(x[n])+1] - x[n]))
...
您必须在此处调整dt
和K
。 dt
应足够小,以使轨迹平滑。较大的K
使轨迹更接近于精确定义,较小的K
使轨迹更加放松。
编辑现在实际上当我想到一点时,我明白强制函数f
的选择并不好,因为引力允许空间速度,即你的轨迹的能力如果初始速度太大,则无限地飞离所需的那个。所以你应该构建另一个函数,可能只是f(x) = K x
或f(x) = K x ^ alpha
,alpha > 0
。你看,这个方案很通用,所以你应该试验一下。
答案 1 :(得分:1)
另一种选择是做这样的事情......
1. Compute the average value of k points in the target path
to get (<x>,<y>).
2, Compte the angle between the most recent point in the path
and (<x>,<y>) and turn that way; if the angle is too big,
turn as hard as possible.
3. Recompute (<x>,<y>) for the next set of k elements by sliding
the window by 1; repeat step 2.
这可能会产生相当合适的行为。我将通过一个例子,但这将是相当乏味的。请注意,这与unkulunkulu概述的方法类似,但在方法方面略有不同。