编写了一个函数,该函数计算在圆周中移动的精灵的坐标。 好,公式很简单
x = x0 + R * cos(t * a + a0)
y = y0 + R * sin(t * a + a0)
函数看起来像这样
public void pointDefinition(float delta)
{
sprite.setPosition(Gdx.graphics.getWidth()/2+(85*(float)Math.cos(i*delta)), Gdx.graphics.getHeight()/2+(85*(float)Math.sin(i*delta)));
i = i + 0.5;
}
我在render()中称它为 最后,一切正常,但是精灵以某种方式紧张地抽动着。 这是一个演示这个的视频。
以下内容将发送到delta变量。
pointDefinition(Math.min(Gdx.graphics.getDeltaTime(), 1 / 60f));
我不明白原因
答案 0 :(得分:3)
您应将i
增加delta
,而不是在公式中使用delta
作为参数:
public void pointDefinition(float delta)
{
sprite.setPosition((Gdx.graphics.getWidth() / 2) + (85 * (float)Math.cos(i)), (Gdx.graphics.getHeight() / 2) + (85 * (float)Math.sin(i)));
i = i + delta;
}
毕竟,delta
每次都有不同的值,这就是有时使小图标向后移动的原因。
要了解发生了什么,请想象一下这两个迭代:
i
= 2
delta
= 0.0025
在这种情况下,i * delta
将为 0.005
。
i
= 2.5
delta
= 0.0017
在这种情况下,i * delta
将为 0.00425
。
如您所见,在第二次迭代中,用作参数i * delta
和Math.sin()
的{{1}}的值减小了,从而导致图标抖动。 / p>
为使动画保持一致,确保传递给这两个函数的参数(Math.cos()
和Math.sin()
仅在每次迭代中增加是很重要的!