【发布时间】: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。