繁体   English   中英

在xna中访问Game1类的字段/属性的最佳方法是什么?

[英]What is the best way to access fields/properties of the Game1 class in xna?

我正在制作一个xna游戏,并且会有很多类来控制绘图和更新等。

这些类需要能够访问原始Game1类的实例,因此他们可以控制图形设备和sprite批处理和东西。

问题是我将拥有一个类网络,调用其他类的类,并且链的最底层的类仍然需要能够访问图形设备的Game1类等。

做这个的最好方式是什么? 只是继续传递Game1作为参数,或者什么?

从软件工程/体系结构的角度来看, “正确”的答案是将您需要的特定资源作为参数传递到方法中。 这提供了许多优点 - 可能最大的优点是它将代码的各个部分分离,允许它们彼此独立使用。

举个例子:你可能有你的游戏。 但是,您可能想要使用相同的代码并制作编辑器,单元测试或任何其他疯狂工具。 在许多情况下,您甚至可能没有Game类。 (为了给你一个具体的例子,我的这个视频向你展示了两种截然不同的运行相同游戏代码的方式 - 如果没有适当的解耦,这是不可能的。)

(在此基础上,你应该传递比Game派生的类更具体的东西。)

如果您有相当开放的版本控制/依赖性要求,并且传递一个IServiceProvider (例如,这是XNA传递给ContentManager的构造函数),您可以更进一步。 我详细分析了为什么你可以在这个答案中这样做。

然而

您没有编写将由第三方使用的库。 你正在写一个游戏。 将使用您的代码的唯一人员是您自己的团队 - 您可以访问源代码,您可以自由地修改它。

这意味着您可以自由选择一些快捷方式。

在实践中,通常可以很好地获取游戏类的静态实例,或者(当我扔东西时这是我首选的方法)游戏类的静态属性。 在XNA中,您知道在实践中您只会拥有一个游戏类实例。

首先要快速轻松地完成这项工作。 而且以后也可以快速轻松地转向以“正确”的方式做事。 只要你准备好了。 良好的版本控制和在Visual Studio中使用“查找所有引用”在这里特别有用。

基本上:只要你明白你正在走捷径, 为什么要接受它,以及“正确”的方式是什么 - 那么就可以采取这种捷径。

为什么不在game1的某个地方保留一个静态引用,一切都是指那个?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM