编程语言
首页 > 编程语言> > C#-在游戏循环中使用结构与参考变量

C#-在游戏循环中使用结构与参考变量

作者:互联网

我正在用Mono游戏弄湿自己的脚.主要是因为我认为这是提高我的编码技能的一种更有趣的方式.

我的问题是,我是否最好在游戏循环的update方法中使用引用的变量,或者使用轻量级的结构?(仅使用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);
}

由于Vector2是结构,因此除非更改为新值,否则无法更改对象向量中的x值.我阅读了有关何时首选结构的Microsoft示例,但不确定它是否以相同的方式应用.

我想象单声道中有一些工具可以帮我做到这一点,但是我仍然想知道每秒进行多次迭代是否会改变事情.

最后,我知道我可以在Game类中声明Vector,但是我试图让Game对象管理它们自己的位置.

解决方法:

以上评论的摘要.

TL; DR:对于像游戏这样的高性能应用,您应该尽可能使用结构,特别是对于循环时间短的情况.

在所有XNA论坛上都进行了逐字讨论.准则和文章以及共识是,您应尽可能使用结构,以免GC造成致命伤害,这可能会伤害游戏.另外,您通常应该避免使用foreach,因为我相信它会创建另一个对象,该对象会由于装箱而影响GC.对于XBox 360或.NET 4之前的c#游戏编写的c#游戏,这个问题在今天尤其严重.

顺便说一句,Monogame是XNA的一个分支,也遇到了同样的问题

在典型的桌面/ Web开发中,请继续使用引用类型,因为GC效率更高,并且在GC进行过程中不会挂起整个应用程序.

> Windows桌面上的.NET 4具有后台GC
> Windows Server上的.NET 4.5具有后台GC

告诉我更多

> Shawn Hargreaves Blog
Twin paths to garbage collector nirvana

> Foreach, Garbage, and the CLR Profiler

标签:game-development,variables,loops,struct,c
来源: https://codeday.me/bug/20191109/2010919.html