私は奇妙な問題を抱えています。それは明らかに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のフェッチが開始されて中断された直後は、正常に機能します。たとえば、「I」キーが押されていることがわかります。しかし、detectKeyDownsを呼び出すと、正しく除外されているように見えます。
私がここで間違っていることを皆さんは見ていますか?