gpt4 book ai didi

actionscript-3 - 避免全局状态

转载 作者:行者123 更新时间:2023-12-04 07:09:20 25 4
gpt4 key购买 nike

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

例如,

我有一个“主要”类(class)。
类(class):主
+---- 屏幕
+---- 相机
+---- 地形
+---- 车辆
+---- 物理世界

它包含我的相机、地形和车辆等类。现在,我在创建 Terrain 对象时遇到了问题。 Terrain 想要访问 Main 类 Screen 对象,以便它可以将其 Terrain Graphics 添加到屏幕。它还想知道何时绘制的 Camera 对象,以便知道绘制它的比例。它还想了解我的 PhysicsWorld 对象,以便将自己添加到物理引擎中。

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

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

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

有什么建议?

最佳答案

It feels cumbersome to constantly have to pass 4-5 things to my classes, especially in my scenario now where almost every in-game object I have needs a screen, physics, camera info, etc. Then the correct question to ask is "why do I need all 5 objects in all my classes?" Why on Earth does every in-gmae object need any of the mentioned things? An in-game object needs a position and whatever it needs to process its behavior. Then a separate renderer can, you know, render, the object. Which means that only the renderer needs the camera info and screen.



物理学可以采用任何一种方式。您可以有一个单独的物理实体来更新游戏对象,或者您可以将该物理对象传递给每个游戏对象。但即使你确实传递了它,我们也只剩下列出的三个对象中的一个。 :)

这就是为什么最好避免使用全局变量和单例变量的原因。它们会伪装您的依赖关系,因此您最终会在对象之间产生比实际需要更多的依赖关系。然后几乎不可能删除全局变量。

但是,如果您确实坚持使用全局变量,请帮自己一个忙,至少避免单例。您不需要单例强制执行的额外约束。

Terrain wants to access Main classes Screen object so it can add its Terrain Graphics to the screen. It also wants to know about the Camera object for when it is drawing so it knows what scale to draw it. It also wants to know about my PhysicsWorld object so it can add itself to the physics engine.



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

关于actionscript-3 - 避免全局状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/621085/

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