libGDX:重复使用屏幕还是每次创建新实例更好?

5
这是我的问题。我有三种不同类型的屏幕:
  1. MainMenuScreen
    • 有一个“开始”按钮,用于切换到GameScreen。还允许玩家更改基本游戏设置。
  2. GameScreen
    • 实际可玩的游戏(玩家角色奔跑和跳跃的地方)。
  3. GameOverScreen
    • 播放动画,然后显示一个菜单,让玩家重新开始游戏(即切换到GameScreen)或返回主菜单(即切换到MainMenuScreen)的屏幕。
在切换屏幕时,将我的屏幕存储在变量中并重用它们是否更好,还是最好在完成后处理每个屏幕,然后创建要切换到的屏幕类型的新实例?
在屏幕切换更频繁的情况下(例如在类似Final Fantasy或Pokemon的游戏中在超级世界屏幕和战斗屏幕之间切换),答案会有所不同吗?
谢谢!
1个回答

6
在我看来,你应该重复使用经常使用的Screen,并且只处理不经常使用的Screen。在你的示例中,GameScreenGameOverScreenMainMenuScreen都应该被重复使用,因为它们直接相互关联:
当玩家开始游戏时,可能会失败。然后显示GameOverScreen,紧接着显示MainMenuScreen。所以用户不需要手动切换到这些Screen
OptionsScreen则可以每次处理完毕之后就销毁并重新创建,因为通常您只需要打开几次OptionScreen。此外,它没有直接关联其他任何Screen,但用户需要“强制”打开OptionScreen
但是只要没有太多的Screen,重复使用应该不成问题。在您的第二个示例中,Screen更频繁地被使用,因此它们绝对应该被重复使用。
编辑:
正如@EssEllDee提到的那样,你还应该使用hide()show()。当你切换Screen时,这些方法由Libgdx调用,并且可以用于处理重资源。例如,当您切换到GameOverScreen时,可以处理用于游戏的Texture,然后在切换到GameScreen时重新加载它们。

2
此外,利用自动调用的 onHide()onShow() 方法。 - EssEllDee
2
@EssEllDee 你是对的。这些方法可以用来处理/重新创建“重型”资源。 - Robert P
感谢你的回答! - hithere
方法的名称为 hide()show(),而不是 onHide()onShow() - Winter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接