使用MVC与libgdx scene2d

3
我开始使用libgdx开发游戏。这实际上是我的第二次尝试,因为当我开始第一次尝试时,我不知道足够的libgdx知识。在我的第一次尝试中,我有一个包含逻辑和纹理的actor子类。然后我开始阅读Gustavo Steigerts教程,并看到他试图分离逻辑和视图。我也试图做同样的事情,但是视图是我的actor子类,它包含有关大小和位置的信息,因此它必须执行碰撞检测,这是逻辑的一部分。此外,如果您在Google上搜索,您会发现使用Scene2d无法实现MVC模式。那么,是否有一种方法可以使用MVC实现Scene2d游戏,还是应该忽略此模式,并将模型和视图放在一个扩展actor的类中?
1个回答

3

这是一个大部分基于观点的问题,但在场景2D和MVC模式方面经常出现。

通常情况下,像Model-View-Controller模式试图做的那样,将关注点分离总是有意义的。对于scene2d来说,这并不容易,因为Actor已经有了act()draw()方法。

我认为你应该始终尝试像实际世界(实体)一样对你的游戏世界进行建模。应该有一个Player、可能是一个Rocket和一个Bunny类/actor/entity,它们应该知道他们需要知道的一切并自己管理。这与实体系统框架相反,其中你的实体由“部件”组成,这些部件由外部系统控制。

大多数情况下,保持一切在一起也使它更加灵活,因为你已经在一个地方拥有了所有需要的东西。你的游戏玩法可能会改变,因此你的实体也会改变。如果你发现你的实体变得太大,你仍然可以将它们分成几个部分,如PlayerModelPlayerControllerPlayerRenderer,它们需要相互引用,然后在你的act()render()方法中触发这些部分。


我实际上有自己的游戏对象类,比如敌人,它存储生命值、速度和武器。然后我有一个继承自Image的GraphicObject类。对于敌人,我有一个子类GraphicEnemie,它继承自GraphicObject,并且本身具有指向enemie类型对象的引用。在act()方法中,我根据enemie对象中的速度移动图形。你认为这是一个好方法,还是如果我添加更多内容(如更多敌人等)会变得太复杂? - Robert P
对我来说似乎可以工作。当你引入更多的敌人,也就是不同的敌人时,它将导致新的敌人类别,并且你分离了你的设计。如果您想采用100%的MVC方法,则可以查看实体系统框架,例如http://gamadu.com/artemis/tutorial.html。但是它们不容易上手,您的设计会变得更加复杂。但这是您的另一个选择(没有scene2d)。 - noone
我想我会选择使用Scene2d,非常感谢! - Robert P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接