我正在用Mono游戏弄湿我的脚。主要是因为我觉得它是一种更有趣的方法来提高我的编码技巧。
我的问题是,我最好在游戏循环的更新方法中使用引用变量,还是使用轻量级结构?(仅用2个整数初始化)
var GameObject GObject = new GameObject();
int Move=1;
void update
{
if(key.left)
GObject.Location.x -= Move;
}
或代替做
void update
{
if(key.left)
GObject.Location = new Vector2(updatedX,Y);
}
由于Vector2s是结构体,我不能更改对象向量内的x值,除非我创建一个新值。我读了微软关于什么时候首选结构的例子,但我不确定它是否适用相同的方式。
我想有单声道的工具可以为我做这件事,但我仍然想知道是否有多次迭代会改变一些事情。
最后,我知道我可以在Game类中声明Vector,但我试图让Game对象管理自己的位置。
答案 0 :(得分:3)
上述评论摘要。
<强> TL; DR:对于游戏等高性能应用,您应该尽可能使用struct
,特别是对于短暂的情况,如循环播放。
所有XNA论坛都逐字讨论过这个问题;指南和文章以及共识是,您应尽可能使用struct
,以避免来自GC的致命暂停,这可能会伤害游戏。此外,您通常应该避免 foreach
,因为它会创建另一个因拳击而影响GC的对象我相信。对于为XBox 360或.NET 4之前的c#游戏编写的c#游戏,当天的问题特别严重。
顺便说一句,Monogame是XNA的一个分支,并且遇到同样的问题
在典型的桌面/ Web开发中,请继续使用引用类型,因为GC更高效,并且在GC正在进行时不会暂停整个应用程序。