代码之家  ›  专栏  ›  技术社区  ›  Qmppu842

我应该在游戏的每个屏幕上使用屏幕+舞台吗?

  •  0
  • Qmppu842  · 技术社区  · 10 年前

    我已经使用LibGDX有一段时间了,而且阶段非常有趣(至少在我看来)。
    但我还没有看到任何真正的指导如何使用专业级的舞台。
    现在,我的当前项目有MainMenuScreen、MainMenuStage、GameScreen、GameStage课程,还有更多课程。
    由于我的多阶段屏幕系统,我已经遇到了设置输入的问题。因此,很高兴知道是否有更好的方法来实现屏幕+阶段。

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

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

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

    P.S.提前谢谢,如果有拼写错误,请道歉。

    2 回复  |  直到 10 年前
        1
  •  1
  •   Robert P    10 年前

    Screen s通常用于游戏中有不同任务的部分。
    A. MenuScreen 例如,有不同的任务 GameScreen ,所以应该是另一个 屏幕 。此外,这些游戏部件通常使用不同的资源,因此使用不同的 屏幕 s允许您在切换时加载/卸载资源 屏幕 .
    所以你不需要使用 屏幕 s、 但这让事情变得容易多了。
    你可以把所有的东西都放在一个里面 屏幕 ,但这只会使事情变得更复杂,代码也更难阅读。

    你也可以有不同的 Stage 您的课程 屏幕 尽管我从未创造过 阶段 类,但只是使用了标准 阶段 并添加了一些 Actor 是的。
    只需记住设置 阶段 您当前的 屏幕 作为您的 InputProcessor 否则你不会注意到输入。
    如果您正在使用 InputMultiplexer ,请确保注销您的 阶段 内部 Screen.hide 方法,因为它不应该再获得输入。
    还要注意 Scene2D 而且是 阶段 有一些缺点:
    您不能使用MVC模式,因为 男演员 我们有一个 act (更新逻辑的方法)和 draw (绘制 男演员 ). 所以逻辑和观点是同一类的。
    这可能适用于UI(我喜欢使用 场景2D 对于UI)和更简单的游戏,但在更大的游戏中,使用其他东西可能更容易。

        2
  •  0
  •   Jose Martinez    10 年前

    我没有使用LibGDX,但我不得不处理相同的场景,并以不同的方式处理它。我发现,最适合我的是将公共字段和方法放在父级或Screens中,然后创建子级Screens和Stages来放置这些类特有的字段和方法。

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

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

    但最终我还是同意会有一个GameScreen和GameStage,还有MenuScreen和MenuStage等等。目标是让它们变得优雅,如果它们的大部分实现都可以放在父类或装饰中的话,可能会很小。