0

我正在用 XNA 制作游戏。我准备好了相机、背景和滚动课程。

我所缺少的只是在相机位置改变时告诉滚动工作。有没有这方面的声明?

像:

if (cameraposition.X ""Increases"")
{
    Scrolling.Update()
}

谢谢。

4

2 回答 2

6

您必须跟踪旧的相机位置,看看它是否发生了变化。所以你的 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()无论哪种方式,只要您首先更改相机的位置,就直接调用会更有意义。

于 2012-05-10T12:29:07.967 回答
3

这自然是性能选择,但如果您简单地说:

 Scrolling.Update(cameraPosition.X, cameraPosition.Y)

如果滚动已经在有效位置,不会改变任何东西。

自然地,在使用前应进行测量。这样,您将避免存储状态变量或附加变量来存储“旧”信息。

于 2012-05-10T12:31:16.937 回答