所以我不確定我在做什麼錯誤,並且我一直在這一點上停留了很長時間。我在爲一個小型遊戲設計一個花哨的加載屏幕而混亂。 (雖然是不需要的,但因爲我還在練決定先走,並添加一個反正)無法在libGDX中繪製加載屏幕
下面是相關代碼的問題:
//Game states
private enum STATE
{
LOADING, START_MENU, PLAYING, PAUSE, GAME_OVER
}
private STATE state = STATE.LOADING;
這些都是gamestates,所以它從LOADING開始,因此它可以在渲染方法中運行LOADING案例。
public void show()
{
//Setting up AssetManager
startMenuBackground = new Texture(Gdx.files.internal("startMenuBackground.png"));
startMenuBackgroundSplit = new TextureRegion(startMenuBackground).split(32, 32);
assetManager = new AssetManager();
for(int appleImage = 0; appleImage < apple.length; appleImage++)
{
assetManager.load("bits/" + appleImage + ".png", Texture.class);
}
for(int bodyImage = 0; bodyImage < snakeBody.length; bodyImage++)
{
assetManager.load("body/" + bodyImage + ".png", Texture.class);
}
for(int backgroundImage = 0; backgroundImage < background.length; backgroundImage++)
{
assetManager.load("background/" + backgroundImage + ".png", Texture.class);
}
assetManager.load("KappaMan.png", Texture.class);
assetManager.load("playButton/0.png", Texture.class);
assetManager.load("playButton/1.png", Texture.class);
assetManager.load("title.png", Texture.class);
assetManager.load("AmenoSandstorm.mp3", Music.class);
assetManager.load("beMad.mp3", Music.class);
assetManager.load("collide.mp3", Music.class);
assetManager.finishLoading();
所以,這是顯示方法的啓動,它加載了我的所有遊戲資源。
startMenuBackgroundSplit = new TextureRegion(startMenuBackground).split(32, 32);
這部分對這個問題特別重要,因爲它是我如何顯示遊戲加載的進度。 (這是不工作的一部分,我得到一個黑色的屏幕。)
case LOADING:
{
if(assetManager.update())
{
state = STATE.START_MENU;
}
else
{
progress = assetManager.getProgress();
tilesToLoad = 576 * progress;
tilesY = (int)tilesToLoad/32;
tilesX = (int)tilesToLoad % 32;
}
break;
}
現在我開始加載所有資產進行遊戲,而它運行負荷。所以如果它是真的,它會去START_MENU,如果不是,那麼它會檢查進度。 tilesY是我需要加載startMenuBackground的行數,tilesX是我需要在startMenuBackgroundSplit的最後一行進行加載的tile的數量。
if(state == STATE.LOADING)
{
for(int tilesYLoad = 0; tilesYLoad < tilesY; tilesYLoad++)
{
if(tilesYLoad != tilesY - 1)
{
for(int tilesXLoad = 0; tilesXLoad < 32; tilesXLoad++)
{
batch.draw(startMenuBackgroundSplit[tilesXLoad][tilesYLoad], tilesXLoad * 32, tilesYLoad * 32);
}
}
else
{
for(int tilesXLoad = 0; tilesXLoad < tilesX; tilesXLoad++)
{
batch.draw(startMenuBackgroundSplit[tilesXLoad][tilesYLoad], tilesXLoad * 32, tilesYLoad * 32);
}
}
}
}
終於在batch.begin()之後的render方法中; 我有這個代碼,將根據加載所有資產的進度繪製所有相關的瓷磚。
if(state == STATE.LOADING)
{
layout.setText(loadingFont, LOADING_TEXT);
loadingFont.draw(batch, LOADING_TEXT, 0, layout.height);
}
還有這個在左下方寫加載。
現在我已經做出了將gamestate更改爲START_MENU的部分,如果進度完成了評論。所以我知道遊戲何時啓動,在去START_MENU之前,它會加載文本。 「Loading ...」,但它根本不加載背景?它只是黑色。
我不知道我做錯了什麼。有任何想法嗎?
謝謝!這有幫助,雖然在做之前,如你所說,我不得不做一個新的方法,我叫assignAssets(),在show方法我知道加載所有資產!當assetManager.update()返回true時,在轉到START_MENU之前,它會分配所有資產。 :) –