我在游戏中添加了一个“控制台”,我可以在其中键入命令,并收到响应(它基于this)。我需要能够访问我在我的控制台类中的Game.cs中实例化的对象。我无法将它们传递给构造函数,因为一旦“引擎”完成,我不知道会有多少。
我尝试使用方法将对象添加到Dictionnary<string, object>
但我无法访问属性。
我希望能够做到:
Game1.cs
TileMap tileMap = new TileMap();
BakuConsole console;
...
console = new BakuConsole(this, Content.Load<SpriteFont>("ConsoleFont"));
console.AddRef("tileMap", tileMap);
BakuConsole.cs
public void AddRef(/* some args */) {
// halp!
}
public void Execute(string input) {
switch (input)
{
case "some --command":
console.WriteLine(g.ToString());
// execute stuff, with an object that was added via AddRef()
console.WriteLine("");
console.Prompt(prompt, Execute);
break;
default:
console.WriteLine("> " + input + " is not a valid command.");
console.WriteLine("");
console.Prompt(prompt, Execute);
break;
}
}
我希望我足够清楚。谢谢!
修改 我只是不希望我的构造函数变大,以防我添加更多类型:
TileMap tileMap = new TileMap();
OtherType1 ot1 = new OtherType1();
OtherType2 ot2 = new OtherType2();
OtherType3 ot3 = new OtherType3();
OtherType4 ot4 = new OtherType4();
OtherType5 ot5 = new OtherType5();
IronPython正是我想要做的,并通过Globals.Add(“string”,object“)来完成。但是,我似乎无法在源代码(IronPython)中找到它。
答案 0 :(得分:0)
我可以看到你将Game的引用传递给Console类。为什么不使用该引用来访问Game类所需的内容?
答案 1 :(得分:0)
您需要在字典中指定要在字典中添加的对象的类名。
假设我必须添加“Game1
”对象,那么我们应该按照以下方式初始化字典......
Dictionary<string, Game1> dicDemo = new Dictionary<string, Game1>();
Game1 objgame1 = new Game1();
dicDemo.Add(string.Empty,objgame1);
答案 2 :(得分:0)
根据您的描述,您实际上并不需要字典,您需要在某个对象上使用多个属性,可能直接在BakuConsole
上;
class BakuConsole
{
… // your current code here
public TileMap TileMap { get; set; }
public OtherType1 OtherType1 { get; set; }
…
}
然后,您可以这样设置:
console.TileMap = tileMap;
console.OtherType1 = otherType1;
…
然后当您使用它时,访问属性时不会有任何问题。