上周我一直在努力解决这个问题,但似乎找不到既不需要单例也不需要紧耦合的解决方案。我正在开发一款 3D 太空游戏,这里有一个早期的
演示
......从平视显示器(Hud 类)中选择。
游戏的结构是:
Game 类包含 Hud 和 ObjectsList 类。
ObjectsList 类包含各种游戏对象,包括玩家、各种船、行星和轨道(空间站)。
当玩家到达轨道的一定距离内时,任务会被实例化。
任务被添加到一个 MissionsList 类,它本身在 ObjectsList 中。
任务可能会变得不可用并在没有警告的情况下过期(就好像它们被另一个飞行员选择了一样),因此显示在 Hud 上的列表是动态的并且会定期更新。
以前,我已经让任务将事件发送到 Game,而 Game 又将更改通知 Hud。这对我来说似乎有点笨拙,因为信息需要传递到 Hud 的各种更深层次的“层次”。我最终得到了很多相同的功能。
我正在考虑的解决方案是将 MissionsList 类的引用注入到 Hud 中,使其能够监听来自 Missonslist 的更新。我听说将某物的状态与其显示混合是一种不好的做法,但我不知道如何将任务的“实时”列表获取到 Hud。相比之下,如果 Hud 只包含显示细节而不参考生成这些细节的任务对象,那么当玩家从 Hud 中选择一个任务时,我如何确定选择了哪个任务?在这种情况下紧耦合可以吗?还是我应该使用单例与 Hud 进行通信?如果我建议的任何事情存在根本性的错误,我欢迎被告知那是什么以及最佳解决方案是什么。谢谢。