是否有“If(X增加)”功能?

时间:2012-05-10 12:27:49

标签: c# xna

我正在和XNA一起玩游戏。 我有相机,背景和滚动课程准备好了。

我缺乏的是在相机位置改变时告诉滚动工作。那是否有声明?

像:

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

感谢。

2 个答案:

答案 0 :(得分:6)

您必须跟踪旧相机位置,并查看它是否发生变化。所以你的if是:

if(cameraPosition.X != oldCameraPosition.X)

在每个帧的末尾,您要更新oldCameraPosition变量,如下所示:

oldCameraPosition = cameraPosition;

两个位置之间的差异通常称为delta或velocity。现在,对于滚动,您可以使用相机Delta调用更新,因此您可以滚动相同(或修改后的数量)。例如:

//In Camera.cs
Scrolling.Update(oldCameraPosition - cameraPosition);

//In your scrolling class
void Update(Vector3 offset)
{
 background.Position += offset * .5f;
}

这样,每次相机移动时,背景平面都会以半速移动。使用不同的修饰符进行3次这样的技巧,你会产生一种副作用。

通常你会想要使用事件,但游戏开发可以例外。轮询通常是要走的路,因为你已经有一个类似于事件循环的游戏循环。 无论哪种方式,只要您在第一时间更改相机的位置时调用Scrolling.Update()就更有意义了。

答案 1 :(得分:3)

这自然是性能选择,但如果您只是说:

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

如果滚动已经处于有效位置,则不会改变任何内容。

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