我正在和XNA一起玩游戏。 我有相机,背景和滚动课程准备好了。
我缺乏的是在相机位置改变时告诉滚动工作。那是否有声明?
像:
if (cameraposition.X ""Increases"")
{
Scrolling.Update()
}
感谢。
答案 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)
如果滚动已经处于有效位置,则不会改变任何内容。
应该在使用前自然地进行测量。通过这种方式,您将避免存储状态变量或附加变量来存储“旧”信息。