gpt4 book ai didi

c# - 在游戏循环中使用结构与引用变量

转载 作者:行者123 更新时间:2023-11-30 15:54:30 26 4
gpt4 key购买 nike

我正在接触 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);
}

因为 Vector2 是结构,所以我无法更改对象向量中的 x 值,除非我创建一个新的。我阅读了 Microsoft 关于何时首选结构的示例,但我不确定它是否适用于相同的方式。

我想在 mono 中有一些工具可以为我做这件事,但我仍然想知道每秒进行多次迭代是否会改变一些事情。

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

最佳答案


上述评论的总结。


TL; DR:对于像游戏这样的高性能应用,您应该尽可能地尝试使用 struct,特别是对于循环中的短暂情况。

这在所有 XNA 论坛中都逐字讨论过;指南和文章以及共识是您应该尽可能使用 struct 以避免 GC 的 deadly pauses 这会损害游戏。此外,您通常应该避免 foreach,因为我相信它会创建另一个会影响 GC 的对象,因为装箱。对于为 XBox 360 编写的 c# 游戏或 .NET 4 之前的 c# 游戏,这个问题在当时尤为严重。

顺便说一下,Monogame 是 XNA 的一个分支,也有同样的问题

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

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

告诉我更多

关于c# - 在游戏循环中使用结构与引用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50421721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com