首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态-好还是坏?

问静态-好还是坏?
EN

Stack Overflow用户
提问于 2014-12-30 03:54:19
回答 2查看 222关注 0票数 1

好吧,我已经想了很久了。

我在static上读过无数的文章/问题,也读过一些单曲。

很长一段时间以来,我都是这样使用静态的:

我有一个GameManager.cs,它有TileMap.cs & Player.cs。为了更新地图的位置,TileMap.cs需要访问玩家的相机:

代码语言:javascript
复制
GameManager.cs:

public static TileMap map;
public static Player player;

Update code, draw, etc. below...

每一种都只有一种。

代码语言:javascript
复制
TileMap.cs:

Vector2 mapPosition = new Vector2(GameManager.Player.position.X, GameManager.Player.position.Y);

这可以接受吗?这有什么坏处?

编辑:既然这个问题太宽泛了,让我看看是否可以更具体一些。

是否有更好的方法来做到这一点,而不是通过静态方法?我在TileMap.cs中有多个类的列表,其中有些类的列表(主要考虑的是我的粒子引擎),所以会更高效吗,还是真的不重要?

P.S,我注意到当玩家移动游戏地图时有点“紧张”(延迟一小部分秒)。这可能是造成这种情况的原因吗?

谢谢,

谢伊

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-05 13:36:17

我经常注意到类似的专业问题。所以让我给你们一个直截了当的答案,我很清楚这不适用于一般情况。把它看作是我认为的“初学者的最佳实践”的一种观点。

static经常用于使变量跨类边界可用,例如-如果它们是单变量。这里的单例模式只是一个设计模式包装器(它不能解决大部分问题)。虽然这可能会使程序更容易编写,但是如果您想让应用程序多线程,使用static也可以使程序变得更加复杂。

因此,总的来说,我认为避免同时使用static并简单地传递对象是个好主意。

有一个例外,那就是:如果您需要跨线程边界访问的数据。如果是这样的话,您很快就会发现自己陷入了一个痛苦的世界,最好尽可能多地了解锁定,并将其用于所有静态变量(如果它们是结构/类,包括它们的成员!)。

如果这还不够好的话,你可以继续沿着这条路走下去,学习诸如互锁和内存障碍之类的东西(但如果你不需要的话,我不会建议你这么做)。

幸运的是,大多数应用程序足够快地在一个线程中工作。我认为您的应用程序也不例外(您可能可以使用一个标准的游戏框架来执行应用程序的多线程部分-- PS:如果是这样的话,也要小心类变量,因为它们也可能被跨线程边界传递)。

至于您的延迟:我认为您应该使用一个好的分析器来查找性能热点;它可能与static的使用无关。

票数 1
EN

Stack Overflow用户

发布于 2014-12-30 03:59:43

当你问到坏处时:

1)使用static变量的代码是否涉及多线程?如果是,您可以考虑锁定管理。很容易让代码变得复杂。

( 2) Player、position和其他结构是什么?如果是这样的话,每次通过属性访问它们时,都会创建实例的副本,而不是直接访问引用。考虑到代码提供了一些2D引擎,并且您正在创建一个Vector,所以可能是一些呈现管道代码,这可能会带来一些严重的性能影响。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27699394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档