我正在尝试使用SDL 2实现后台滚动。 据我所知,只能通过整数值移动源矩形。 当我每次迭代游戏循环移动一次时,我的滚动工作正常。 但是我想慢一点。我尝试使用此代码移动它
moved += speed;
if (moved >= 1.0) {
++src_rect.x;
moved -= 1;
}
此处moved
和speed
为double
。我希望我的背景移动速度慢十倍,因此我将speed
设置为0.1
。它移动速度慢十倍,但动画不再平滑。它从一个像素跳到另一个像素,当速度很低时看起来很难看。
我正在考虑使我的背景更大并使用整数滚动它。也许当背景足够大时,1
的速度似乎会变慢。
有没有办法慢慢平滑地同时滚动非常大的背景?
感谢。
答案 0 :(得分:0)
我要做的是有一组可以跟踪虚拟屏幕位置的浮动,然后你只需在实际渲染时将浮点数转换为整数,这样你就不会失去浮点数的精度。
举个例子,我有一个SDL_Rect,我想每帧都移动它。我有两个浮点变量跟踪矩形的x和y位置,每一帧我都会更新那些x和y位置,将它们转换为整数,然后渲染矩形,EX:
// Rect position
float XPos = 0.0f;
float YPos = 0.0f;
SDL_Rect rect = {0, 0, 64, 64};
// Update virtual positions
XPos += 20.0f * DeltaTime;
YPos += 20.0f * DeltaTime;
// Move rect down and to the right
rect.x = (int)XPos;
rect.y = (int)YPos;
虽然这并没有给你你想要的确切结果,但这是我所知道的唯一方法,它会让你更精确地延迟你的动作而不会让你在运动中留下那些丑陋的笨拙,它还可以让你添加更精确的加速度等东西。希望这会有所帮助。