首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >避免全球状态

避免全球状态
EN

Stack Overflow用户
提问于 2009-03-07 01:14:30
回答 4查看 508关注 0票数 2

目前我正在编写一个应用程序。如果我想避免单数,是否只需要传递周围所有事物的引用?

例如,

我有个“主修”课。

类:主

+-屏幕

+-照相机

+-地形

+-车辆

+- PhysicsWorld

它包括我的相机,地形,车辆等类。现在,我在创建地形物体时遇到了一些问题。地形需要访问主类屏幕对象,这样它就可以将其地形图形添加到屏幕上。它还想知道相机对象的情况,当它在绘图时,所以它知道绘制它的比例。它还想了解我的PhysicsWorld对象,这样它就可以添加到物理引擎中。

我必须总是在构造函数之间来回拖动这些对象吗?我的意思是,当我创建一个地形对象,我是否只需要通过我的屏幕对象,我的physicsWorld,相机等?

我的另一个随机场景是..。在我的Vehicle类中,我需要在我的主类上调用Restart()方法。这是否意味着我必须将main的一个实例传递给车辆?真的??

不断地把4-5的东西传递给我的班级感觉很麻烦,尤其是在我现在的场景中,我拥有的几乎每个游戏中的对象都需要一个屏幕、物理、相机信息等等。

有什么建议吗?

EN

回答 4

Stack Overflow用户

发布于 2009-03-07 02:21:59

经常要把4-5的东西传递给我的班级,特别是在我的场景中,我几乎所有的游戏对象都需要一个屏幕、物理、相机信息等等。那么正确的问题是:“为什么我在所有的类中都需要所有5个对象?”为什么地球上的每一个物体都需要任何提到的东西?游戏中的对象需要一个位置和任何它需要的东西来处理它的行为。然后一个单独的渲染器可以,你知道,渲染对象。这意味着只有渲染者需要相机信息和屏幕。

不管是哪种情况,物理学都可以。您可以有一个单独的物理实体来更新游戏对象,或者可以将物理对象传递给每个游戏对象。但是即使你真的把它传递出去了,我们也只剩下三个对象中的一个了。:)

这就是为什么全球化和单身汉往往是最好的避免。它们掩盖了您的依赖关系,因此最终对象之间的依赖比实际需要的要多得多。然后就几乎不可能移除这些球状。

然而,如果你坚持使用全球化,那就帮自己一个忙,至少要避免单身汉。您不需要单例强制执行的附加约束。

地形需要访问主类屏幕对象,因此它可以将其地形图形添加到屏幕上。它还想知道相机对象的情况,当它在绘图时,所以它知道绘制它的比例。它还想了解我的PhysicsWorld对象,这样它就可以添加到物理引擎中。

地形对象需要知道一件事:地形是什么样的。其他人可以负责渲染它。有人需要知道相机,屏幕和地形图形,当然,这意味着同样的对象可能有可能完成涉及这些对象的其他任务(例如其他渲染任务)。为什么地形要关心它所画的比例呢?它需要知道刻度是多少,但不需要知道相机空间的刻度。为什么其他人不能把地形添加到物理引擎中呢?主要功能可能甚至能够做到这一点。创建地形,创建物理引擎,注册地形与物理引擎,开始游戏。

票数 2
EN

Stack Overflow用户

发布于 2009-03-07 01:24:22

我不知道ActionScript,但假设变量是通过引用传递的,那么至少您可以构造一个“Environment”类,其中包含摄像机、屏幕、地形、PhysicsWorld,这些都是传递给实例的。

票数 1
EN

Stack Overflow用户

发布于 2009-03-07 03:55:19

我也遇到了同样的问题(巧合的是,actionscript 3中也有)。

我一直在为flash编写RTS,并发现自己需要传递大量对每个新类的引用(例如,gameGrid、currentSelection、visibleUnits等)。

我最终意识到我真正应该做的是让每个类维护它自己的属性,而不是传递对这些类的引用(好的对象)。

但是无论如何,现在我要做的是让静态变量包含对常用对象的引用,例如在一个名为RTSGlobals的类中的主舞台、接口、引擎和显示区域。我也在里面放了常量,比如屏幕大小。

我知道这并不能真正回答你的问题,但我认为,有时需要忽略一些OOP的良好实践来支持一个有效的解决方案。

如果某人有一个很好的实践解决方案,请告诉:)

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

https://stackoverflow.com/questions/621085

复制
相关文章

相似问题

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