【问题标题】:I am trying to create a pause screen ontop of my playscreen (where the user plays the game)我正在尝试在我的播放屏幕(用户玩游戏的地方)顶部创建一个暂停屏幕
【发布时间】:2018-11-29 21:56:03
【问题描述】:

我正在尝试使用 libgdx 在 java 中创建一个暂停屏幕。

我的问题是我正在尝试在播放屏幕上创建屏幕,因此当用户按下按钮“p”时,游戏将暂停;游戏的状态将与用户离开的位置完全相同,当他们单击恢复按钮时,他们将回到播放屏幕,恢复游戏的当前状态。

现在我已经实现了一个暂停屏幕,用户点击“p”,他们将被发送到一个显示恢复按钮的全新屏幕。现在,当用户单击恢复时,它确实将用户返回到播放屏幕,但它会为他们完全重新启动它。由于某种原因,它不会回到他们留下的状态。

任何帮助将不胜感激。 T

【问题讨论】:

  • “由于某种原因,它不会回到他们留下的状态。” - 原因是您从头开始创建此屏幕。您应该以某种方式序列化屏幕状态然后加载它,或者使用一些技巧来“冻结”游戏,覆盖这个暂停屏幕,然后揭开并让它再次运行
  • "for some reason" 如果您显示您的代码,我们可以告诉您确切的原因是什么。但是,如果您希望暂停屏幕对您的游戏屏幕透明,您需要创建自己的自定义 Game 类,该类可以一次绘制多个屏幕,或者将所有暂停功能与您的游戏放在同一个屏幕中。

标签: java android libgdx


【解决方案1】:

这是因为在您的 LibGDX 应用程序中,您正在替换您的活动屏幕,这会破坏之前的屏幕。

如果您正在暂停游戏,并且不想离开游戏屏幕,您可以在游戏屏幕中设置一个布尔值 (isPaused)。如果这是真的,请不要更新您的游戏元素并渲染您的暂停菜单。如果为 false,则您的游戏会更新。

优势:这意味着您不必保存所有游戏数据,因为它仍在内存中。

缺点:您的暂停菜单将更像是一个覆盖组件,而不是它自己的屏幕,但对于用户来说,这仍然可以看起来像您想要的那样。 ;)

【讨论】:

  • 嗨罗伯特!我是 Java 编程新手,所以如果我看起来“愚蠢”,请原谅我,但是,它会不会是这样的:if(isPaused == true) { //EMPTY } else{ //RUN RENDER CODE }跨度>
  • 是的!您可以执行 if(is Paused) {renderPauseMenu()} else { renderGame()} 之类的操作,并将相同的逻辑应用于您的更新循环。
  • 干杯朋友,欣赏它。我现在设法解决了这个问题。我现在唯一的问题是,每当我按“P”进入暂停菜单时,它确实会出现,但它会出现在屏幕上其他所有内容的后面......这有什么原因吗?提前谢谢你。
  • 这是渲染顺序的问题。如果你想让暂停菜单在你的游戏中渲染,你应该把它放在你的渲染方法的最后。 render() {renderGameWorld() if(isPaused) renderPauseMenu()}
猜你喜欢
  • 2013-04-06
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-06
  • 1970-01-01
相关资源
最近更新 更多