2011-12-29 46 views
0

我想为一个游戏,比如pong做一个简单的可重用引擎。我在时间和投入方面遇到麻烦。例如,使用XNA Game Class,更新方法每秒被激发60次。要在一个我从头开始的课程中做到这一点,我会使用定时器还是完全不同的东西?C#游戏循环和输入

为了澄清我的输入问题,我将如何检测按键事件(EX:按键被按下)?我认为这与代表有关,但我不确定。

编辑:我没有使用XNA。

+0

为什么你首先不使用XNA?任何具体原因不使用它? – smnbss 2011-12-29 23:28:47

+0

我正在使用MonoDevelop,因此我可以跨平台。我有外部库中的平台特定代码,用于绘图等。只有Windows支持XNA。 – 2011-12-29 23:32:31

回答

1

您可能希望使用具有回调的定时器,或者甚至是完全是游戏循环的第二个线程。我已经在Java和C#中完成了它;我倾向于使用计时器,因为毫秒分辨率对于大多数游戏来说足够好。如果你想看一些(Java)示例代码,请查看我的rudimentary game engine。至于游戏输入......那么请查看示例代码。它管理事件驱动的输入并封装它以便可以轮询数据。 :P

或者,查看MonoXNA。它还不是100%完整的,但2D部分和基本游戏的东西(游戏循环,输入等)是。

+0

感谢您的链接......我刚刚浏览了MonoXNA的Game.cs类,并且我已经能够了解事情如何一起工作。我将下载源代码并通读所有内容,以了解它的所有功能(输入,时序等)。我也将看看你的游戏引擎。非常感谢链接。 – 2011-12-30 02:55:48

+0

没问题。您可能需要直接使用MonoXNA,而不是重新发明轮子。 – GGulati 2011-12-30 19:34:36

0

您真正需要做的只是检查更新方法中的键盘输入。或者,您可以创建一个可以在更新方法中调用的updateInput方法。

private void updateInput() 
{ 
    KeyboardState newState = Keyboard.GetState(); 

    if (newState.IsKeyDown(Keys.Enter)) 
    { 
     // code goes here 
    } 
} 

就是这样!当然,这是一个基本的方法,并且由于您正在考虑制作可重复使用的引擎,因此您应该查看GameComponent课程。在XNA中,您可以制作可在不同游戏项目中重复使用的组件。

希望这会有所帮助!

+0

不幸的是,我没有使用XNA,因为它不是跨平台的。我试图弄清楚的是如何在没有现有游戏库(如XNA)的情况下进行计时和输入。 – 2011-12-29 23:37:25

+0

哎呀!一定会误解这个问题。 – slezakattack 2011-12-30 04:37:27