2

我目前正在开发一个 C# .net XNA 游戏引擎。

我有一个关于引擎设计的问题。首先,我希望我的引擎能够包含我自己的脚本语言。为此,我想我必须能够访问游戏中所有对象的所有属性,或者只是我想要更改的那些。

我开始做的第一件事是尝试通过字符串进行访问。为此,我制作了每个“实体”,可以绘制到屏幕上的东西,都有一个包含所有属性的字典。属性的添加是在实体类中手动完成的。我从那以后读到,当你有很多字典但里面的东西不多时,它会减慢 GC。我相信这就是我现在的比赛中正在发生的事情。在开始丢失 fps 之前,我最多只能获得大约 1000 个具有基本属性(即颜色、位置、纹理)的实体。

我想知道除了我正在做的事情或使用反射之外,是否还有其他方法可以动态访问对象的属性,因为这比字典还要慢。还是我应该重新考虑整个设计?

4

2 回答 2

2

您可以查看运行时编译并简单地使用 C# 编写脚本。如果你为你的脚本定义了一个标准接口,你可以在你的引擎运行时读取、编译和运行它们,类似于这个

于 2010-07-09T00:51:38.150 回答
2

我做了类似的事情,尽管使用 Java,使用 JavaScript 作为脚本语言。

我让它工作的方式基本上是将对象直接暴露给脚本语言。您应该能够直接从脚本语言调用类上的方法,所以我真的不明白实现一些奇怪的动态属性黑客的原因。

于 2010-07-09T00:31:58.157 回答