班级组织:内部或外部职能

时间:2011-07-15 14:17:46

标签: actionscript-3 class organization

我正在Flash中创建一个侧滚动游戏(as3)并尝试保持整洁有序。

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

我有一个玩家类,地形类,敌人类等等,但内部没有太多内容。

感谢/

2 个答案:

答案 0 :(得分:2)

听起来好像是时候看看你如何分解你的关卡类并将其中一些功能转移到其他类。你所描述的内容一直在发生,所以不要担心 - 这只是意味着重组一点。

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

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

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

答案 1 :(得分:1)

在这里没有过多介绍面向对象的设计原则,我的建议是问自己“什么属于名为X的类。”

所以例如,听起来Level类应该跟踪玩家,敌人和地形......好吧,等级(也许地图或舞台可能是一个更好的名字?)。但它不需要为这些对象做所有的工作;可以将许多用于移动,碰撞,声音等功能的功能移动到其他类。然后Level成为一个协调者;有点像导演带领音乐(但实际上并没有演奏小提琴,喇叭等)。

此外,听起来像玩家,地形和敌人有很多共同之处。例如,它们都需要移动和碰撞处理。您可以创建父类(例如GameObject),并从中扩展PlayerTerrainEnemy类。这种多态性对于处理常用功能非常有用。