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



我已经使用LibGDX有一段时间了,并且stage非常有趣(至少在我看来)。
但我还没有看到任何真正的指导如何使用阶段像pro。
现在我目前的项目有MainMenuScreen, MainMenuStage,GameScreen, GameStage类和更多的即将到来。由于我的多级屏幕系统,我已经遇到了设置输入的问题。所以我很想知道是否有更好的方法来执行屏幕+阶段。

关于在屏幕上同时使用多个阶段有很多话题,但我还没有看到任何其他方面的东西。

那么有必要为游戏中的每个屏幕使用Screen和Stage类吗?或者是否有比屏幕+舞台类更好的方式来显示菜单和一般内容?

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

注:提前感谢,如果有拼写错误,很抱歉。

Screen通常用于具有不同任务的游戏部分。
例如,MenuScreenGameScreen有不同的任务,所以应该是另一个Screen。而且这些游戏部件通常使用不同的资源,所以使用不同的Screen允许你在切换Screen时加载/卸载资源。
所以你不需要使用 Screens,但它使事情变得容易得多。
您可以在一个Screen中包含所有内容,但这只会使事情变得更加复杂,代码将更难阅读。

你也可以为你的Screen有不同的Stage类,即使我从来没有创建一个Stage类,但只是使用标准的Stage和添加一些Actor s到它。
只要记住将当前ScreenStage设置为InputProcessor,否则您将不会注意到输入。
如果您正在使用InputMultiplexer,请确保在Screen.hide方法中注销Stage,因为它不应该再获得输入。
还要注意的是,Scene2D和它的Stage有一些缺点:
你不能使用mvc模式,因为Actor有一个act(更新逻辑的方法)和一个draw(绘制Actor的方法)。所以逻辑和视图在同一个类中。
这可能适用于UI(我喜欢使用Scene2D作为UI)和简单的游戏,但在大型游戏中,使用其他东西可能更容易。

我没有使用LibGDX,但我不得不处理相同的场景并以不同的方式删除它。我发现对我来说效果很好的是在父阶段或屏幕中放置常见的字段和方法,然后让子阶段和屏幕放置那些类特有的字段和方法。

例如,在一个特定的应用程序中,我有一个名为AppScreen的类。我所有的屏幕都继承了它。我还有另一个类叫PagableScreen它也继承了AppScreen,我有一些类继承了PagableScreen。这允许我将属于PagableScreen的所有字段和方法放在一个地方,并且不需要跨需要可分页功能的其他类重新实现。

相反的设计是使用Decorator模式,它实际上工作得很好,但如果问题空间不够大,可能会变得混乱。使用Decorator,您可以创建特定的功能和属性,作为特定屏幕/舞台的附加类,例如装饰类。因此,以PagableScreen为例,我将使用PagableDecoration来代替PagableDecoration,任何需要可分页功能的屏幕都可以用它来装饰自己。这在你可能想要添加一些其他装饰的情况下是有效的。例如,假设你也有一个MenuDecoration,它给屏幕提供了一些做菜单屏幕的功能,现在需要Pagable和menu功能。使用Decorator模式,您可以在一个类中获得这两个元素,而使用纯继承时,您只能是PagableScreen或MenuScreen中的一个。

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

最新更新