为什么精灵抽搐?
Why sprite twitches?
写了一个函数来计算一个圆周运动的精灵的坐标。
嗯,公式很初级
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));
无法理解原因
您应该使用 delta
递增 i
而不是使用 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
。
如您所见,您用作 Math.sin()
和 Math.cos()
参数的 i * delta
的值在第二次迭代中减小,导致您的图标抖动.
为了保持动画的一致性,重要的是要确保传递给这两个函数(Math.sin()
和 Math.cos()
)的参数只随着每次迭代而增加!
写了一个函数来计算一个圆周运动的精灵的坐标。 嗯,公式很初级
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));
无法理解原因
您应该使用 delta
递增 i
而不是使用 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
。
如您所见,您用作 Math.sin()
和 Math.cos()
参数的 i * delta
的值在第二次迭代中减小,导致您的图标抖动.
为了保持动画的一致性,重要的是要确保传递给这两个函数(Math.sin()
和 Math.cos()
)的参数只随着每次迭代而增加!