我现在一直在使用LibGDX而且各个阶段非常有趣(至少在我看来) 但我还没有看到任何真正的指南如何使用像pro这样的阶段 现在我的当前项目有MainMenuScreen,MainMenuStage,GameScreen,GameStage等等。还有更多。 由于我的多级屏幕系统,我已经遇到了设置输入的问题。所以很高兴知道是否有更好的方法来实现屏幕+阶段。
关于在屏幕上同时使用多个阶段有多个主题,但我还没有看到任何其他方面。
那么有必要为游戏中的每个屏幕使用Screen和Stage类吗?或者是否有更好的方式比屏幕+舞台类显示菜单和一般的东西?
TD; DR:我应该在游戏中使用多个屏幕和舞台课吗?
P.S。如果有拼写错误,请提前致谢并对不起。
答案 0 :(得分:0)
我没有使用过LibGDX,但是我不得不处理相同的场景并以不同的方式进行交流。我发现对我来说很有效的方法是将常用字段和方法放在父级或屏幕中,然后制作子屏幕和阶段以放置这些类独有的字段和方法。
例如,在特定的应用程序中,我有一个名为AppScreen的类。我的所有屏幕都继承了它。我还有另一个名为PagableScreen的类,它也继承了AppScreen,我有一些继承自PagableScreen的类。这允许我将与PagableScreen相关的所有字段和方法放在一个位置,而不需要在需要可分页功能的其他类中重新实现。
反对设计是使用Decorator模式,它实际上工作得很好,但如果问题空间不够大而无法保证它会变得混乱。使用Decorator,您可以创建特定的功能和属性作为特定Screen / Stage的附加类,例如装修班。因此,以PagableScreen为例,我会改为使用PagableDecoration,任何需要可调整功能的屏幕都会自行装饰。这实际上适用于可能需要添加其他装饰的情况。例如,假设您还有一个MenuDecoration,它为屏幕提供了一些用于执行菜单屏幕的功能,现在需要Pagable和Menu功能。使用Decorator模式,您可以在一个类中获得,在纯粹的继承中,您只能是PagableScreen或MenuScreen。
但最终我确实会同意GameScreen和GameStage以及MenuScreen和MenuStage等等。如果他们的大部分实现都可以放入父类或装饰中,那么目标是使它们变得更加优秀和可能很小。
答案 1 :(得分:0)
Screen
通常用于游戏中有不同任务的部分
例如,MenuScreen
具有与GameScreen
不同的任务,因此它应该是另一个Screen
。此外,这些游戏部分通常使用不同的资源,因此在切换Screen
时,使用不同的Screen
可以加载/卸载资源。
因此,您不需要使用Screen
,但这会使事情变得更加容易
你可以拥有一个Screen
内的所有内容,但这会让事情变得更复杂,代码将更难以阅读。
即使我从未创建Stage
课程,但您只使用标准Screen
并添加了一些Stage
,您也可以为Stage
设置不同的Actor
课程1}} s to it
只需记住将当前Stage
的{{1}}设置为Screen
,否则您不会注意到输入。
如果您使用的是InputProcessor
,请确保在InputMultiplexer
方法中取消注册Stage
,因为它不应再获取输入。
另请注意,Screen.hide
及其Scene2D
有一些缺点:
您不能使用MVC模式,因为Stage
具有Actor
(更新逻辑的方法)和act
(绘制{{1}的方法) })。所以逻辑和观点属于同一类
这可能适用于UI(我喜欢使用draw
用于UI)和更简单的游戏,但在更大的游戏中,使用其他东西可能更容易。