【问题标题】:Libgdx - fade away effectLibgdx - 渐隐效果
【发布时间】:2016-04-14 21:19:20
【问题描述】:

目前我已经实现了我的淡入淡出效果,所以当屏幕打开时它以[alpha = 0]开头,然后对于它正在绘制的每个Sprite,它都会执行[alpha += 2.5f * delta_time],直到它到达[alpha + 2.5f * delta >= 1]...

这同样适用于[if screen = closed] --> [alpha = 1][alpha -= 2.5f * delta_time],直到达到[alpha - 2.5f * delta <= 0]...

这在我的 Windows 上运行得非常好,但在我的手机上看起来……嗯,有时它看起来不错,但大多数时候手机总是有点滞后,所以它有时会像整个淡入淡出效果一样跳过。淡出效果很好,可能是因为所有对象都已创建!

那么我的游戏是否会因为正在创建对象和游戏而滞后于淡入淡出效果?你会如何解决这个问题?

编辑

public void openScreen(float delta) {
    playButton.getButton().setColor(playButton.getButton().getColor().r, playButton.getButton().getColor().g, playButton.getButton().getColor().b, alpha);
    shopButton.getButton().setColor(shopButton.getButton().getColor().r, shopButton.getButton().getColor().g, shopButton.getButton().getColor().b, alpha);
    scoreFont.setColor(scoreFont.getColor().r, scoreFont.getColor().g, scoreFont.getColor().b, alpha);

    if (alpha + (2.5f * delta) >= 1) {
        alpha = 1f;
        playButton.getButton().setColor(playButton.getButton().getColor().r, playButton.getButton().getColor().g, playButton.getButton().getColor().b, alpha);
        shopButton.getButton().setColor(shopButton.getButton().getColor().r, shopButton.getButton().getColor().g, shopButton.getButton().getColor().b, alpha);
        scoreFont.setColor(scoreFont.getColor().r, scoreFont.getColor().g, scoreFont.getColor().b, alpha);
        openable = false;
    } else {
        alpha += (2.5f * delta);
    }
}

public void changeScreen(float delta) {
    playButton.getButton().setColor(playButton.getButton().getColor().r, playButton.getButton().getColor().g, playButton.getButton().getColor().b, alpha);
    shopButton.getButton().setColor(shopButton.getButton().getColor().r, shopButton.getButton().getColor().g, shopButton.getButton().getColor().b, alpha);
    scoreFont.setColor(scoreFont.getColor().r, scoreFont.getColor().g, scoreFont.getColor().b, alpha);

    if (alpha - (2.5f * delta) <= 0 && option == 1) {
        game.setScreen(new GameScreen(game, assetsClass, preferencesHelper));
        dispose();
    } else if (alpha - (2.f * delta) <= 0 && option == 2) {
        game.setScreen(new InGameShop(game, assetsClass, preferencesHelper));
        dispose();
    } else {
        alpha -= (2.5f * delta);
    }
}

在渲染时调用...渲染中还有一些精灵,但它们的处理方式相同!所以更改屏幕工作正常,但打开屏幕可能会滞后!

【问题讨论】:

  • 先让它们不可见然后淡入?
  • 那些精灵在创建屏幕时的alpha = 0.0f,所以它们是不可见的,但是在创建屏幕时,在那一刻它都是滞后的,所以它几乎没有显示任何淡入淡出效果,如果任何,或者有时它很好而且很流畅。
  • 发布一些代码,这可能是某种竞争条件。
  • 在上面添加了代码,注意,当 setScreen 被调用时,它会将 openable 设置为 true 并将 alpha 设置为 0.0f,如果 openable 为 true 则运行 openScreen 方法,同样的逻辑适用于 closable。

标签: android libgdx


【解决方案1】:

您的代码没有任何问题,但是正如您自己所说的那样,当应用加载时游戏会滞后。这意味着随着 deltaTime 的增加,显示淡入效果的帧数会减少。

你可以做些什么来解决这个问题是有一个最大的 deltaTime ,你可以在其中进行褪色,例如:

if (alpha + (2.5f * delta) >= 1) {
        ...
    } else if (delta < someSmallDelta) {
        alpha += (2.5f * delta);
    }

顺便说一句,为了让您了解这些动画的细节,您可能需要查看 Universal Tween Enginescene2d actions

【讨论】:

  • 尝试了一些设置最大值的方法,但是没有用,因为我的峰值太大了...当我加载到主菜单时,前 5 x delta 大约是 0.07,然后它回落到 0.017...虽然我不明白为什么不仅第一个增量是 0.07,而且还有 5...这些增量时间不是渲染渲染所有内容的时间吗?那么每个对象都是在构造函数中创建的!
  • 我现在更改了代码,以便它检查 alpha = 1 然后 alpha == 0 和 alpha == 1,因此它们几乎不可见,并且 delta
猜你喜欢
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 2014-11-19
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
相关资源
最近更新 更多