我使用XNA作为游戏的框架。在我的Input
课程中,我使用XNA获取键盘状态并检测按键:
namespace MyGame.Classes
{
public class Input : IInput
{
public bool DetectKey( Keys key )
{
if ( Keyboard.GetState().IsKeyDown( key ) )
{
return true;
}
return false;
}
}
}
最近我'一直在试图整合Newtonsoft.Json为我的游戏管理的配置设置。在另一个类中,我读了JSON文件:
{
"Settings": {
// ...
},
"Controls": {
"Keyboard": {
"W": "Up",
"A": "Left",
"S": "Down",
"D": "Right"
}
}
}
然后我将JSON转换为强类型对象:
namespace MyGame.Classes
{
public class Config
{
public Settings Settings = new Settings();
public Controls Controls = new Controls();
}
public class Controls
{
public Keyboard Keyboard = new Keyboard();
}
public class Keyboard
{
public string W = "Default";
public string A = "Default";
public string S = "Default";
public string D = "Default";
}
}
我遇到的问题是,我想在我的Keyboard
类中使用MyGame.Classes.Keyboard
类(Microsoft.Xna.Framework.Input.Keyboard
和Input
),如下所示:
namespace MyGame.Classes
{
public class Input : IInput
{
public bool DetectUp( Config config )
{
// Convert string to enum
var key = GetKey( config.Controls.Keyboard.W );
return DetectKey( key );
}
}
}
显然编译器对此并不满意。我一直在寻找解决方案,但大多数提出此问题的人都可以控制这两个名称空间。我不确定如何根据我的情况调整任何这些解决方案:
我尝试将其添加到Input
的顶部:
using Keyboard = Microsoft.Xna.Framework.Input.Keyboard;
using KeyboardConfig = MyGame.Classes.Keyboard;
这不起作用,因为编译器仍尝试使用MyGame.Classes.Keyboard
来解析类中的每个Keyboard
。
对我来说,最好的方法是什么?
答案 0 :(得分:3)
你是对的,你应该使用那些使用语句标识符的那些。
我猜这不起作用,因为你把类名放在using语句中和/或使用了与类名相同的标识符名称。
你尝试过这样的事吗?
using kb = Microsoft.Xna.Framework.Input;
var test = kb.Keyboard.GetState(...);