ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-09 02:07:08  阅读:191  来源: 互联网

标签:game-development variables loops struct 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有