有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我应该在游戏中的每个屏幕上使用screen+stage吗?

我使用LibGDX已经有一段时间了,stages非常有趣(至少在我看来)
但我还没有看到任何真正的指导如何使用像pro这样的舞台
现在,我当前的项目有MainMenuScreen、MainMenuStage、GameScreen、GameStage类以及更多即将推出的课程
由于我的多级屏幕系统,我已经遇到了设置输入的问题。因此,如果有更好的方法来实现screens+stage,那就太好了

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

所以游戏中的每个屏幕都需要使用Screen和Stage类吗?或者有没有比screen+stage类更好的方式来显示菜单和一般内容

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

另外,请提前感谢,如果有拼写错误,请道歉


共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    我没有使用LibGDX,但我不得不处理相同的场景,并以不同的方式进行深入研究。我发现对我来说,最有效的方法是将公共字段和方法放在父级阶段或屏幕中,然后制作子级阶段和屏幕来放置这些类特有的字段和方法

    例如,在一个特定的应用程序中,我有一个名为AppScreen的类。我所有的屏幕都继承了它。我还有另一个名为PagableScreen的类,它也继承了AppScreen,还有几个类继承自PagableScreen。这使我能够将与PagableScreen相关的所有字段和方法放在一个位置,而不需要跨需要PagableScreen功能的其他类重新实现

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

    但最终我同意会有一个游戏屏幕、游戏舞台、菜单屏幕和菜单页面等等。如果它们的大部分实现都可以放在父类或装饰中,那么目标是使它们更加优雅,并且可能更小