我正在用 XNA 制作游戏。我准备好了相机、背景和滚动课程。
我所缺少的只是在相机位置改变时告诉滚动工作。有没有这方面的声明?
像:
if (cameraposition.X ""Increases"")
{
Scrolling.Update()
}
谢谢。
您必须跟踪旧的相机位置,看看它是否发生了变化。所以你的 if 将是:
if(cameraPosition.X != oldCameraPosition.X)
在每一帧结束时,您要更新 oldCameraPosition 变量,如下所示:
oldCameraPosition = cameraPosition;
两个位置之间的差异通常称为增量或速度。现在对于滚动,您可以使用相机 Delta 调用您的更新,因此您滚动相同(或修改的量)。例如:
//In Camera.cs
Scrolling.Update(oldCameraPosition - cameraPosition);
//In your scrolling class
void Update(Vector3 offset)
{
background.Position += offset * .5f;
}
这样,每次相机移动时,您的背景平面都会以半速移动。使用不同的修饰符将这个技巧重复 3 次,您将获得视差效果。
通常你会想为此使用事件,但是游戏开发可以例外。轮询通常是要走的路,因为你已经有了一个很像事件循环的游戏循环。Scrolling.Update()
无论哪种方式,只要您首先更改相机的位置,就直接调用会更有意义。
这自然是性能选择,但如果您简单地说:
Scrolling.Update(cameraPosition.X, cameraPosition.Y)
如果滚动已经在有效位置,不会改变任何东西。
自然地,在使用前应进行测量。这样,您将避免存储状态变量或附加变量来存储“旧”信息。