2016-04-14 40 views
0

目前,我已經實現了我的淡入淡出效果了,所以,當屏幕打開它[alpha = 0]開始,然後爲每個雪碧,這是借鑑它[alpha += 2.5f * delta_time],直到它達到[alpha + 2.5f * delta >= 1] ...Libgdx - 淡出效果

而且同樣適用於[if screen = closed] --> [alpha = 1][alpha -= 2.5f * delta_time],直到它到達[alpha - 2.5f * delta <= 0] ...

這個奇妙的作品在我的窗戶,但我的手機上,它看起來...那麼有時它看起來不錯,但大多數手機時代一直滯後一點,所以它有時會像整個淡入效果一樣跳過。淡出效果效果很好,可能是因爲所有對象都已經創建好了!

因此,如果效果因爲對象和遊戲被創建而造成我的遊戲滯後於淡入淡出效果?你將如何去解決這個問題?

編輯

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); 
    } 
} 

這就是所謂的渲染......還有更多的是幾個精靈在渲染,但他們相同的方式處理!所以更換屏幕工作正常,但開放屏幕可能會滯後!

+0

創建它們先隱形然後淡入其中? – Shark

+0

這些精靈的alpha = 0.0f當屏幕被創建時,所以它們是不可見的,但是當屏幕被創建時,在那一刻它是所有的laggish,所以它幾乎不顯示任何淡入效果,如果有的話,或者有時它是好的順利。 –

+0

發佈一些代碼,它可能是某種競爭條件。 – Shark

回答

0

你的代碼沒有問題,但是你說自己遊戲在應用程序加載時滯後。這意味着有更少的幀顯示淡入淡出效果,因爲deltaTime上升。

,你能做些什麼來解決這個是有一個最大的DeltaTime在你做類似的衰落:

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

順便說一句,到releave你這些動畫的細節問題,你可能要考慮Universal Tween Enginescene2d actions

+0

嘗試了一些設置最大值,但不起作用,因爲我的秒殺是很大的......當我加載到我的主菜單時,前5個三角洲的大約是0.07,然後回落到0.017 ......雖然我不明白爲什麼不僅第一個三角洲是0.07,但有5個......不是那些德爾塔時間是渲染渲染一切的時間?那麼每個對象都是在構造函數中創建的! –

+0

我現在更改了代碼,以便它檢查是否alpha <= 0且alpha> = 1,然後alpha == 0和alpha == 1,以便它們幾乎不可見,並且delta <= 0.04,我希望它可以用於所有設備,所以現在它工作很多,非常扼殺,雖然有時我仍然可以看到精靈,因爲它們並不完全消失,任何優化的想法? –