Java 在libgdx场景2d中使用MVC

Java 在libgdx场景2d中使用MVC,java,model-view-controller,libgdx,scene2d,Java,Model View Controller,Libgdx,Scene2d,我开始用libgdx开发一个游戏。这实际上是我的第二次尝试,因为当我开始第一次尝试时,我不知道libgdx的用法。在我的第一次尝试中,我有一个包含逻辑和纹理的actor子类。然后我开始阅读,我看到他试图把逻辑和观点分开。我也尝试过这样做,但是视图是我的actor子类,包含关于大小和位置的信息,所以它必须进行碰撞检测,这是逻辑的一部分。此外,如果你在谷歌上搜索,你会发现使用Scene2d你无法进行MVC。 那么,有没有一种方法可以使用MVC实现scene2d游戏,或者我应该忽略这一模式,在一个类中

我开始用libgdx开发一个游戏。这实际上是我的第二次尝试,因为当我开始第一次尝试时,我不知道libgdx的用法。在我的第一次尝试中,我有一个包含逻辑和纹理的actor子类。然后我开始阅读,我看到他试图把逻辑和观点分开。我也尝试过这样做,但是视图是我的actor子类,包含关于大小和位置的信息,所以它必须进行碰撞检测,这是逻辑的一部分。此外,如果你在谷歌上搜索,你会发现使用Scene2d你无法进行MVC。
那么,有没有一种方法可以使用MVC实现scene2d游戏,或者我应该忽略这一模式,在一个类中使用模型和视图来扩展actor?

这是一个主要基于观点的问题,但当涉及scene2d和MVC模式时,这是一个经常出现的问题

通常,像模型-视图-控制器模式尝试做的那样分离关注点总是有意义的。对于scene2d,这并不是那么容易,因为
Actor
s已经有了
act()
draw()
方法

在我看来,你应该始终尝试像他们一样为你的游戏世界(实体)建模。应该有一个
玩家
,也许有一个
火箭
,也许有一个
兔子
职业/演员/实体,他们应该知道自己需要知道和管理的一切。这与实体系统框架相反,在实体系统框架中,实体由“部分”组成,而这些部分由外部系统控制


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

我实际上有自己的游戏对象类,比如enemie,它存储生命值、速度和他持有的武器。然后我有一个GraphicObject类,它扩展了Image。对于enemie,我有一个子类GraphicEnemie,它扩展了GraphicObject,并且它本身有一个对enemie类型的对象的引用。在act()方法中,我根据enemie对象的速度移动图形。你认为这是一个好方法吗?或者如果我添加更多的内容,比如更多的敌人等,它会变得复杂吗?这似乎对我很有用。当你引入更多的敌人,这意味着不同的敌人,它也将导致新的敌人类,你分开你的设计。如果您想采用100%MVC方法,那么您可以看看实体系统框架。但是它们不容易适应,你的设计会变得更复杂。但这是你的另一个选择(没有场景2D),我想我会继续使用场景2D,非常感谢!