键盘状态比较失败

时间:2012-06-25 01:19:17

标签: c# xna

我遇到了一个奇怪的问题,最明显的原因是我作为XNA游戏程序员的新身份,但这里有。我有一个我制作的KeyboardManager课程,非常简单:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace CrazyCoders.XYZ.Framework
{
    public class Keyboard
    {

        public KeyboardState previousState = Microsoft.Xna.Framework.Input.Keyboard.GetState();
        public KeyboardState newState;

        public void begin()
        {
            //Get the new state
            KeyboardState newState = Microsoft.Xna.Framework.Input.Keyboard.GetState();
        }

        public Keys[] detectKeyDowns()
        {
            return newState.GetPressedKeys().Except(previousState.GetPressedKeys()).ToArray();
        }

        public Keys[] detectKeyUps()
        {
            return previousState.GetPressedKeys().Except(newState.GetPressedKeys()).ToArray();
        }

        public void end()
        {
            //Save the new state for the next pass
            previousState = newState;
        }

    }
}

此类保存以前的键盘状态,并在调用begin()时使用新的键盘状态。然后使用newState和previousState,detectKeyDowns和detectKeyUps计算数组异常,以返回最近被按下或取消压缩的内容。

问题是,事情不起作用......

我试着添加

if (newState.IsKeyDown(Keys.I))
{
    Console.WriteLine(
}

在newState fetch开始和中断之后,它工作正常,我看到我的“I”键被按下了。但是,当我调用detectKeyDowns时,除了正确之外,我似乎可以。

你们有没有看到我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

begin()方法中,您要重新定义newState变量。从你的行的开头删除“KeyboardState”,一切都应该开始工作。