我应该为游戏中的每个屏幕都使用屏幕+舞台吗?

Should I use screen+stage for every screen in my game?

我已经使用 LibGDX 一段时间了,阶段非常有趣(至少在我看来)。
但是我还没有看到任何真正的指南如何使用像pro这样的阶段。
现在我当前的项目有 MainMenuScreen、MainMenuStage、GameScreen、GameStage classes 以及更多。
由于我的多级屏幕系统,我已经遇到了设置输入的问题。所以很高兴知道是否有更好的方法来实现屏幕+阶段。

屏幕上有多个关于同时使用多个阶段的主题,但我还没有看到其他方面的内容。

那么游戏中的每个屏幕是否都需要使用 Screen 和 Stage class?或者有比 screen + stage class 更好的方法来显示菜单和一般内容吗?

TD;DR: 我应该在游戏中使用多个屏幕和舞台 classes 吗?

P.S。在此先感谢,如果有拼写错误,我们深表歉意。

我没有用过 LibGDX 但我不得不处理相同的场景并以不同的方式处理它。我发现对我有用的方法是将公共字段和方法放在父级阶段或屏幕中,然后制作子屏幕和阶段以放置那些 classes.

独有的字段和方法

例如,在一个特定的应用程序中,我有一个名为 AppScreen 的 class。我所有的屏幕都继承自它。我还有另一个 class 称为 PagableScreen,它也继承了 AppScreen,我还有一些 class 继承自 PagableScreen。这使我可以将与 PagableScreen 相关的所有字段和方法放在一个地方,并且不需要跨其他需要分页功能的 classes 重新实现。

一个相反的设计是使用 Decorator 模式,它实际上工作得很好,但如果问题 space 不够大到不能保证它会变得混乱。使用 Decorator,您可以创建特定的功能和属性作为特定 Screen/Stage 的附加组件 class,例如装修classes。因此,以 PagableScreen 为例,我会改为使用 PagableDecoration,任何需要分页功能的屏幕都会用它来装饰自己。这在您可能想要添加一些其他装饰的情况下非常有效。例如,假设您还有一个 MenuDecoration,它为 Screen 提供了一些执行菜单屏幕的功能,现在需要 Pagable 和 Menu 功能。使用 Decorator 模式,您可以将两者合而为一 class,而对于纯继承,您只能是 PagableScreen 或 MenuScreen。

但最终我同意会有 GameScreen 和 GameStage 以及 MenuScreen 和 MenuStage 等等。如果它们的大部分实现可以放入父级 class 或装饰中,我们的目标是使它们优雅且可能很小。

Screens 通常用于游戏的各个部分,它们具有不同的任务。
例如,MenuScreen 与您的 GameScreen 有不同的任务,因此它应该是另一个 Screen。此外,这些游戏部分经常使用不同的资源,因此使用不同的 Screen 可以让你在切换 Screen.
时使用 load/unload 资源 所以你不需要使用 Screens,但它让事情变得更容易。
您可以将所有内容都放在一个 Screen 中,但这只会让事情变得更复杂,并且代码将更难阅读。

您也可以为您的 Screen 使用不同的 Stage class,尽管我从未创建 Stage class,但只是使用了标准 Stage 并添加了一些 Actor
请记住将当前 ScreenStage 设置为 InputProcessor,否则您不会注意到输入。
如果您正在使用 InputMultiplexer,请确保在 Screen.hide 方法中取消注册您的 Stage,因为它不再需要输入。
另请注意,Scene2DStage 有一些缺点:
您不能使用 MVC 模式,因为 Actor 有一个 act(更新逻辑的方法)和一个 draw(绘制 Actor 的方法) .所以逻辑和视图在同一个class.
这可能适用于 UI(我喜欢对 UI 使用 Scene2D)和更简单的游戏,但在更大的游戏中使用其他东西可能更容易。