【问题标题】:Component design pattern oop (as3)组件设计模式 oop (as3)
【发布时间】:2014-05-04 02:38:11
【问题描述】:

我很难决定组件(要添加到对象中的对象)应如何通信和更改其“父”对象的数据。

例如,如果我有一个玩家对象和一个碰撞对象,我会将玩家(父)对象传递给碰撞对象,并让碰撞对象在适当的时候更改玩家对象的属性。但是我将如何在不创建新的碰撞子类的情况下重写碰撞对象函数来更改玩家对象?

当碰撞对象检测到碰撞时,玩家父对象是否可以传入一个回调函数来运行?这是个好主意吗?基本上我希望播放器对象保存一组组件并在所有组件上运行更新函数。

一个组件与另一个组件通信的最佳方式是通过传递给它的播放器(父)对象吗?

提前致谢。

【问题讨论】:

  • 如果你在理解它所解决的问题之前应用了一个模式,那么你就走错了路。设计模式解决了非常具体的问题,因此您需要确保首先解决了问题。否则,您肯定会遇到更多问题。例如,为什么玩家应该包含碰撞?另外,如果你想为 2d 游戏做一个好的设计,你最好看看2D game framework(使用你最喜欢的搜索引擎)。

标签: actionscript-3 flash oop design-patterns components


【解决方案1】:

有很多设计模式,您可能想在线查看。只需搜索“设计模式”,也可以搜索 GoF - 这是一个成熟的作者团体,他们制作了第一本关于它的书籍。

没有“完美”的方式来做到这一点——一切都取决于你的结构和实现的想法。

您可以查看Observer 模式,但我建议您阅读整本书。

我通常不喜欢传递回调,以便孩子可以修改它的父母。通常,继承树应该在另一个方向 - 控制它的子级的父级。这就是为什么有一个Controller 模式,它决定如何处理每个对象。

您还可以让它们通过事件或观察者进行通信,或者您希望的任何方式,以使控制器类知道状态应该发生变化。

这确实取决于具体情况,但我基本上会分派事件并获得一个通用控制器来决定要做什么以及使用哪个节点。您可能还想检查一个状态模式。

【讨论】:

  • 感谢您的回答,感谢您对模式的建议。关于修改父级的子级,这是尝试松散耦合,例如可以将组件添加到父级并修改父级,而父级不需要知道组件是否存在。我可能会在这方面做得很差,所以我认为需要对我进行更多的设计模式研究。干杯
  • @Nate 我推荐 Head First Design Patterns 这本书,因为它比原来的 GoF 书在教学上更先进。
  • 我必须同意 GoF 对设计模式提出了第一个建议,所以他们的书有点奇怪,有时会受到批评。这就是为什么我说需要进一步研究的原因,因为可能有关于该主题的更好读物(可能直接关于 AS 语言)。 @Fuhrmanator - 你能发布一些在线阅读的链接,让我们看看吗? :)
猜你喜欢
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
相关资源
最近更新 更多