Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 避免全球国家_Actionscript 3_Singleton_Global Variables - Fatal编程技术网

Actionscript 3 避免全球国家

Actionscript 3 避免全球国家,actionscript-3,singleton,global-variables,Actionscript 3,Singleton,Global Variables,目前我正在编写一个应用程序。如果我想避免单身,我是否必须简单地传递周围所有事物的引用 比如说, 我有一门“主要”课。 类:主 +----屏幕 +----照相机 +----地形 +----车辆 +----物理世界 它包含我的相机、地形和车辆等类。现在,我在创建地形对象时遇到了一些问题。Terrain希望访问主类屏幕对象,以便将其地形图形添加到屏幕。它还想知道绘制时相机对象的情况,以便知道绘制它的比例。它还想知道我的PhysicsWorld对象,这样它就可以将自己添加到物理引擎中 我是否必须始终在构

目前我正在编写一个应用程序。如果我想避免单身,我是否必须简单地传递周围所有事物的引用

比如说,

我有一门“主要”课。
类:主
+----屏幕
+----照相机
+----地形
+----车辆
+----物理世界

它包含我的相机、地形和车辆等类。现在,我在创建地形对象时遇到了一些问题。Terrain希望访问主类屏幕对象,以便将其地形图形添加到屏幕。它还想知道绘制时相机对象的情况,以便知道绘制它的比例。它还想知道我的PhysicsWorld对象,这样它就可以将自己添加到物理引擎中

我是否必须始终在构造函数之间来回拖动这些对象?我的意思是,当我创建一个地形对象时,我是否只需要绕过我的屏幕对象、我的物理世界、相机等等

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

经常要把4-5件东西传给我的班级感觉很麻烦,尤其是在我现在的场景中,我拥有的几乎所有游戏中的对象都需要屏幕、物理、相机信息等等


有什么建议吗?

我不知道ActionScript,但假设变量是通过引用传递的,那么您至少可以构造一个包含摄影机、屏幕、地形、物理世界的“环境”类,并将其传递给实例

经常吃东西感觉很麻烦 把4-5件东西传给我的班级, 特别是在我现在的场景中 几乎我所有的游戏内物品 需要屏幕,物理,摄像机信息, 等 然后要问的正确问题是“为什么我需要所有类中的所有5个对象?” 为什么在地球上的每一个在gmae对象需要任何提到的东西?游戏中的对象需要一个位置以及处理其行为所需的任何东西。然后,你知道,一个单独的渲染器可以渲染对象。这意味着只有渲染器需要摄影机信息和屏幕

物理学可以走任何一条路。您可以有一个单独的物理实体来更新游戏对象,或者您可以将该物理对象传递给每个游戏对象。但是,即使你真的传递了这些信息,我们也只剩下列出的三个对象中的一个了。:)

这就是为什么环球人和单身汉通常是最好避免的。它们掩盖了您的依赖关系,因此最终您的对象之间的依赖关系远远超过您实际需要的。然后,几乎不可能移除全局

然而,如果你坚持环球旅行,帮你自己一个忙,至少要避免单身。您不需要单例强制的附加约束

Terrain希望访问主类 屏幕对象,以便它可以添加 将地形图形显示到屏幕上。信息技术 还想知道关于相机的事 对象,以便在绘制时 知道画什么比例。它也 想知道我的物理世界吗 对象,以便它可以将自身添加到 物理引擎

地形对象需要知道一件事:地形是什么样的。其他人可以负责渲染它。当然,有人需要了解相机、屏幕和地形图形,这表明同一对象可能能够完成涉及这些对象的其他任务(例如其他渲染任务)。
为什么地形应该关心它所绘制的比例?它需要知道相机空间中的比例,但不需要知道相机空间中的比例。为什么其他人不能将地形添加到物理引擎中?甚至,主函数也可以做到这一点。创建地形,创建物理引擎,用物理引擎注册地形,开始游戏。

我有完全相同的问题(同样在actionscript 3中,巧合的是)

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

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

但不管怎样,现在我要做的是在一个名为RTSGlobals的类中创建静态变量,其中包含对常用对象的引用,例如主阶段、接口、引擎和显示区域。我还把屏幕大小等常量放在里面

我知道这并不能真正回答你的问题,但我觉得有时候为了一个有效的解决方案,忽略一些面向对象的良好实践是值得的


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

我建议你看看XNA的示例项目(谷歌it)。它们设计得很好,可能会给你一些提示

此外,由于您使用的是AS3,因此可以使用事件系统将消息发送给其他实体。例如,不要将Main传递给Vehicle类,而是让Main(或其他感兴趣的内容)成为Vehicle类的侦听器。然后,假设发生车祸,你想重新启动游戏,调度一个事件,例如car_crash。你汽车的听众应该根据这条信息做些什么。如果您想了解事件系统,请键入EventDispatcher,突出显示它,然后在Flash IDE中单击F1