我一直在研究一种使用从文本框派生的字符串来更改c#游戏控件的方法。
moverighttext = System.IO.File.ReadAllText(@"C:\Users\Public\TestFolder\moverighttext.txt");
movelefttext = System.IO.File.ReadAllText(@"C:\Users\Public\TestFolder\movelefttext.txt");
//I have the letter 'D' Stored in moverighttext.txt and the letter 'A' Stored in movelefttext.txt
var moverightkey = (Keys)Enum.Parse(typeof(Keys), moverighttext);
var moveleftkey = (Keys)Enum.Parse(typeof(Keys), movelefttext);
if (KeyboardState.IsKeyDown(Keys.moveleftkey))
if (KeyboardState.IsKeyDown(Keys.moverightkey))
{
acceleration.X = 0;
}
这会产生错误: - 'Microsoft.Xna.Framework.Input.Keys'不包含'moveleftkey'的定义
'Microsoft.Xna.Framework.Input.Keys'不包含'moverightkey'的定义
我很喜欢使用像'Enum.Parse'之类的东西,但我的印象是我添加了'moverightkey' 和'moveleftkey'作为'Microsoft.Xna.Framework.Input.Keys'的定义。
我正在寻找解决这些错误或找到正确处理此问题的方法。
答案 0 :(得分:2)
游戏中的每个键都不需要单独的文本文件。相反,您可以使用一个合适格式的文本文件(Binary,XML等..)并解析它以获取所有关键信息(查找Serialization
以获取更多相关信息)。
假设Enum.Parse
来电成功,您无需将Keys
添加到moveleftkey
前缀,因为它已经是Keys
枚举。你可以这样称呼它
if (KeyboardState.IsKeyDown(moveleftkey))
答案 1 :(得分:1)
Keys
是一个枚举,而moveleftkey
不是其中一个值。但是,moveleftkey
- 解析后 - 枚举值(或应该是)。
删除Keys.
前置moveleftkey
和moverightkey
并试一试。
我还建议您简化控制键的分配。您当然不需要创建多个文件。
将以下内容复制到Xml文件(例如control_keys.xml
):
<?xml version="1.0" encoding="utf-8"?>
<control_keys>
<move_left key="l"/>
<move_right key="r"/>
<!-- add more control keys -->
</control_keys>
加载xml并获取Keys
,如下所示:(请参阅此处了解如何使用Linq-to-Xml)
var conrolKeys = XDocument.Load("control_keys.xml").Root;
// now get your Keys text values
var moveLeftText = controlKeys.Element("move_left").Attribute("key").Value;
var moveRightText = controlKeys.Element("move_right").Attribute("key").Value;
// now get your Keys values
var moveLeftKey = (Keys)Enum.Parse(typeof(Keys), moveLeftText);
var moveRightKey = (Keys)Enum.Parse(typeof(Keys), moveRightText);
修改有关命名空间的评论
将项目引用添加到:
然后,Visual Studio应协助解析您的using
语句。但是,简而言之:
using System.Xml;
using System.Linq.Xml;
答案 2 :(得分:1)
解析完您的枚举后(进入moverightkey
和moveleftkey
变量),您不希望在Keys
前添加前缀。只有在直接访问特定Key值时才需要这样做。请记住,Keys
枚举代表键盘上的实际键。虽然有一个“A”键,但没有“moveleft”键。但是,您可以创建一个名为moveleftkey
的变量,并为其指定值Keys.A
。
e.g:
if (KeyboardState.IsKeyDown(moveleftkey))
{
}