【问题标题】:Class organization: Function internal or external类组织:函数内部或外部
【发布时间】:2011-07-15 14:17:46
【问题描述】:

我正在用 Flash (as3) 创建一个横向卷轴游戏,并试图让一切井井有条。

我创建了一个“Level”类,用于获取所有关卡数据、玩家数据,并创建所有地形对象和玩家对象。它开始变得混乱,因为我处理了所有用于玩家碰撞检查和玩家移动、地形移动、声音开始和停止、敌人等等的功能,所有这些都在这个类中。这是正常的吗?或者有没有更好的方法来组织事物以将它们分开,但仍然允许它们相互交互。

我有一个玩家类、地形类、敌人类等等,但它们里面并没有太多的东西。

谢谢/

【问题讨论】:

    标签: actionscript-3 class organization


    【解决方案1】:

    听起来是时候看看如何分解关卡类并将其中的一些功能移至其他类。你所描述的事情一直在发生,所以不要担心 - 这只是意味着是时候重新组织一下了。

    您可能会考虑以玩家碰撞为例,并将其移至物理类。您可以设置一个静态函数,允许您传入两个 DisplayObject,然后测试两者之间的冲突。

    对于声音,您可以考虑像 SoundManager 这样的单例类,它将所有声音保存在一个数组或字典中,然后让您的其他类通过 SoundManager 上的 playSound(soundName:String):void 之类的函数播放声音。

    希望这能给你一个开始。随时询问您是否需要更多详细信息。如果您发布一些代码,它也可能会有所帮助。祝你好运!

    【讨论】:

    • 好酷。我有一个问题是这样的:如果 Level 类有一个 contentContainer movelclip,里面有 terrian 和敌人,并且有一个名为 EffectsManager 的单独类可以添加诸如 fireMC 或 explodeMC 之类的视觉效果,我将如何让 EffectsManager 添加这些 MC到内容容器?或者这是错误的做法。
    • EffectsManager 应该扩展一个显示对象。 contentContainer.addchild(EffectsManager)。然后在 EffectsManager 类中为每个带有定位参数的效果创建一个函数。在这些函数中 this.addChild( someeffect )
    • @The_asMan 感谢您的回复。对于诸如处理碰撞检测和运动的混合之类的事情呢?例如,玩家应该在关卡中移动,但在途中有墙时会被阻止。而不是通过它。这种情况让我很困惑。
    • 仅此主题就有大量信息,您需要自己进行一些研究,并尝试找出最适合您和您正在设计的游戏的方法。这是一个开始google.com/…
    • 另外,请尽量将您的问题保持在每个线程 1 个问题。这将使您能够专注于您所问的问题并获得更直接的答案。评论部分不是提问的好地方,因为其他没有对此答案发表评论的人根本看不到它,我相信你不只是想从我这里得到答案
    【解决方案2】:

    这里不用过多讨论面向对象的设计原则,我的建议是问问自己“什么属于名为X 的类”。

    例如,听起来Level 类应该跟踪玩家、敌人和地形……嗯,关卡(也许地图或舞台可能是一个更好的名称?)。但它不需要为这些对象做所有的工作;许多为运动、碰撞、声音等工作的函数可以移动到其他类。然后Level 成为编排器;有点像指挥音乐的指挥(但实际上并不拉小提琴、喇叭等)。

    此外,听起来玩家、地形和敌人有很多共同点。例如,它们都需要运动和碰撞处理。您可以创建一个父类(比如GameObject)并让PlayerTerrainEnemy 类从该类扩展。这种多态性对于处理常见功能非常有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 2020-03-07
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 2011-02-18
      • 1970-01-01
      相关资源
      最近更新 更多