java我应该在游戏中的每个屏幕上使用screen+stage吗?
我使用LibGDX已经有一段时间了,stages非常有趣(至少在我看来)
但我还没有看到任何真正的指导如何使用像pro这样的舞台
现在,我当前的项目有MainMenuScreen、MainMenuStage、GameScreen、GameStage类以及更多即将推出的课程
由于我的多级屏幕系统,我已经遇到了设置输入的问题。因此,如果有更好的方法来实现screens+stage,那就太好了
屏幕上有很多关于同时使用多个阶段的主题,但我还没有看到其他方面的内容
所以游戏中的每个屏幕都需要使用Screen和Stage类吗?或者有没有比screen+stage类更好的方式来显示菜单和一般内容
TD;DR:我应该在游戏中使用多个屏幕和舞台类吗
另外,请提前感谢,如果有拼写错误,请道歉
# 1 楼答案
Screen
通常用于游戏中具有不同任务的部分例如,一个
MenuScreen
与您的GameScreen
有不同的任务,因此它应该是另一个Screen
。此外,这些游戏部件通常使用不同的资源,因此使用不同的Screen
可以在切换Screen
时加载/卸载资源因此,您不需要使用
Screen
,但它使事情变得更容易您可以将所有内容都放在一个
Screen
中,但这只会使事情变得更复杂,代码也更难阅读您也可以为
Screen
创建不同的Stage
类,尽管我从未创建过Stage
类,只是使用了标准的Stage
并添加了一些Actor
只需记住将当前
Screen
的Stage
设置为InputProcessor
,否则不会注意到输入如果您使用的是
InputMultiplexer
,请确保在Screen.hide
方法中注销Stage
,因为它将不再获得输入还要注意,
Scene2D
和它的Stage
有一些缺点:您不能使用MVC模式,因为
Actor
有一个act
(更新逻辑的方法)和一个draw
(绘制Actor
的方法)。所以逻辑和视图在同一个类中这可能适用于UI(我喜欢使用
Scene2D
来实现UI)和更简单的游戏,但在更大的游戏中,使用其他东西可能更容易# 2 楼答案
我没有使用LibGDX,但我不得不处理相同的场景,并以不同的方式进行深入研究。我发现对我来说,最有效的方法是将公共字段和方法放在父级阶段或屏幕中,然后制作子级阶段和屏幕来放置这些类特有的字段和方法
例如,在一个特定的应用程序中,我有一个名为AppScreen的类。我所有的屏幕都继承了它。我还有另一个名为PagableScreen的类,它也继承了AppScreen,还有几个类继承自PagableScreen。这使我能够将与PagableScreen相关的所有字段和方法放在一个位置,而不需要跨需要PagableScreen功能的其他类重新实现
相反的设计是使用Decorator模式,它实际上工作得很好,但如果问题空间不够大,可能会变得混乱。使用Decorator,您可以创建特定的功能和属性,作为特定屏幕/舞台的附加类,例如装饰类。所以以PagableScreen为例,我会使用PagableDecoration,任何需要PagableDecoration功能的屏幕都会使用它来装饰自己。这是实际工作的情况下,可能会有一些其他装饰你可能想要添加。例如,假设您还有一个MenuDecoration,它为屏幕提供了一些执行菜单屏幕的功能,现在需要分页和菜单功能。使用Decorator模式,您可以在一个类中同时获得这两种模式,其中与纯继承一样,您只能是PagableScreen或MenuScreen
但最终我同意会有一个游戏屏幕、游戏舞台、菜单屏幕和菜单页面等等。如果它们的大部分实现都可以放在父类或装饰中,那么目标是使它们更加优雅,并且可能更小