【问题标题】:Not rendering when there is no update battery optimisation - libgdx没有更新电池优化时不渲染 - libgdx
【发布时间】:2014-03-17 14:32:55
【问题描述】:

我正在寻找在我正在开发的游戏中最大限度地减少电池使用量,而电池使用量很难准确测量,所以我希望知道的人能够回答这个问题。

是否值得我实现一个系统,当屏幕上显示的内容没有更新时我不渲染?类似的东西

updated = false;

for each component
  updated |= component.update();

if (updated)
  render();

如果值得的话,在开始时添加这种东西比在需要时尝试添加要容易得多。

如果我通过 CPU 进行渲染,那么我肯定会说这是值得的,但通过 GPU 我不太确定。与屏幕打开之类的情况相比,这会节省微不足道的电量吗?

编辑: 一点澄清。我正在创建一个文字游戏,所以很多时候用户会盯着一动不动的屏幕寻找文字。根据正在玩游戏的模式,屏幕上可能会发生一些不是由用户输入触发的事情。例如,每 5 秒在屏幕上出现一个新对象。渲染 300 帧而每 5 秒没有发生任何事情似乎是一种真正的浪费,这是我想避免的。

【问题讨论】:

    标签: android opengl-es libgdx battery 2d-games


    【解决方案1】:

    我不知道您的方法是否确实最大限度地减少了电池使用量,但我认为通过在Applicationlisteners 创建或类似的东西中调用Gdx.graphics.setContinuousRendering(false); 来禁用continuous Rendering 会更好。 通过这样做,您可以阻止游戏循环调用您的 render() 方法。然后仅在以下情况下调用它:

    1. 在输入时(按键、触地...)
    2. 拨打Gdx.graphics.requestRendering();
    3. 致电Gdx.app.postRunnable()

    阅读this了解更多信息。

    编辑:

    我现在已经阅读了您的编辑。好吧,“益智游戏”对我来说听起来有点普遍。如果您确定用户将长时间盯着一动不动的屏幕,以找到可能的解决方案,那么non-continuous rendering 可能是正确的方法。但如果它是(例如)带有一些谜题元素的平台游戏,用户可能会一直移动并“即时”解决谜题。在这种情况下,我会正常发红。 此外,您还必须考虑当前视图之外的其他逻辑: 还是平台游戏的例子:如果你必须解决一个谜题才能打开一扇门或其他什么,这扇门后面可能有一些怪物在等你来。因此,如果他们在周围巡逻,您必须更新他们的位置,即使他们在视野之外(门后,建筑物外......)。在这种情况下,我不会再使用non-continuous rendering。 您提到的计时器将调用render(),如果它被解雇。请参阅this 以供参考。 要运行某些东西,而不调用 render(),您需要在另一个 Thread 上运行它,因此使用 java.util.Timer 而不是 libgdx Timer。

    编辑:由于您现在已将“益智游戏”替换为“文字游戏”,我想我知道您的意思。 通常您只需要在触发输入事件时进行渲染。但据我所知,您希望一些对象出现在屏幕上(让它比静止的图片更有趣?)。为此,您需要使用Timer,我不确定libgdx Timer 是否可以做到这一点,否则您可以使用java.util.Timer,当Timerevent 被解雇时,您只需调用requestRendering() 并在您的渲染更新游戏逻辑和重绘。

    【讨论】:

    • 谢谢,我去看看。我不知道这是一个选择。
    • 这适用于菜单屏幕等。我的一个问题是我依赖游戏循环来处理需要渲染的计时器触发事件​​。关于我如何处理的任何建议?
    • 是否有特殊事件,当您需要渲染时?如果是这样,您可以在这些事件发生时致电Gdx.graphics.requestRendering();。 float delta 也应该是最后一次渲染调用和这个渲染调用之间的时间(至少我认为)。但是您能在您的问题中解释您的确切要求吗?
    • 我已经澄清了我在问题中的情况。我猜我可能需要一个单独的线程来为我的计时器启动我的游戏循环。当没有更多更新时,游戏循环可以再次自行停止。
    • 当我禁用连续渲染时,我会遇到 UI 动画问题,它只是在事件上进行动画处理,因此它们可能会中途停止。关于如何仅在动画时请求渲染的任何想法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    相关资源
    最近更新 更多