0

所以我在 SlimDX 中的基本 2d 游戏框架进展顺利。我创建了一个自定义 Sprite 对象,并且对渲染精灵有一些基本的掌握。我现在只需要移动它们。

我有一个基本的游戏循环设置,它基于一本旧的 C# 游戏编程书。设置好所有图形设备位和鲍勃,并在屏幕上绘制我的精灵后,我在我的 Game 类中输入了一个名为Run(). 这有以下内容:

public void Run()
{

    while( this.Created )
    {
        // Process one frame of the game
        ProcessFrame();
        Render();
        // Handle all events
        Application.DoEvents();
    }
}

ProcessFrame()应该包含所有游戏逻辑,以响应事件。虽然我设置了一个简单的事件处理程序(基于 的覆盖OnKeyDown)来检测按键,但我想知道如何收集按键以便我可以在ProcessFrame()方法中处理对它们的响应。

关于这个主题的一些初步研究建议创建一个HashSet<Keys>. 我以前从来没有这样做过,所以我不确定我会怎么做。

可能有很多方法可以做到这一点,所以我想我会先看看人们会推荐什么,然后再跳进去。

提前谢谢大家。

4

1 回答 1

3

我不相信您需要手动捕获输入。这通常由直接输入键盘类处理。我个人自己还没有使用过 SlimDX,但由于它是 DirectX 的包装器(我已经涉足过),您只需要初始化一个变量来保存对键盘的引用,以便您可以轮询它以进行更改,然后对这些变化采取行动。

http://slimdx.org/docs/#T_SlimDX_DirectInput_Keyboard

这样你就可以编写类似的代码

if (myKeyboard.IsKeyDown(Keys.Escape)) { ProgramStatus = GameState.Title; }

假设我的参考变量被称为 myKeyboard。

编辑:我可能还会提到,根据您使用的特定库,保存当前和以前的键盘状态可能是有益的。当您想确保程序只接受一次击键而不是多次击键时,这非常有用。

我记得 XNA 有一个用于控制器的 KEYDOWN 方法,用于测试按钮是否被按住。如果您需要在每次按下按钮时都输入一个输入。IE,如果您的库有 Keypress 方法,那很好,如果它仅捕获 KEYDOWN,您可能需要捕获当前和以前的方法。

 if (myMouse.LeftButton == ButtonState.Pressed && oldMouse.LeftButton == ButtonState.Released) 

于 2012-08-26T20:54:27.020 回答