그래서 내가 뭘 잘못하고 있는지, 그리고 꽤 오랫동안이 시점에서 붙어 있습니다. 나는 작은 게임을위한 멋진로드 스크린을 만들려고 노력하고있다. 그 때문에, 이들은 gamestates 있습니다libGDX에서 로딩 화면을 그릴 수 없습니다
//Game states
private enum STATE
{
LOADING, START_MENU, PLAYING, PAUSE, GAME_OVER
}
private STATE state = STATE.LOADING;
: (.이 필요하지 않습니다하지만 난 아직도 가서 어쨌든 하나를 추가하기로 결정 연습 해요로하지만) 여기
는 관련 질문에 코드입니다 는 LOADING으로 시작하여 render 메소드에서 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();
그래서 내 모든 자산을 게임에로드하는 show 메소드가 시작되었습니다.
이 부분은 게임 로딩 진행 상황을 표시하는 방식으로이 질문에 특히 중요합니다. (작동하지 않는 일부입니다, 나는 검은 화면을 얻을.)
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의 진행률을 맨 아래 행에로드해야하는 타일 수입니다.
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(); 모든 자산을로드하는 진행 상황에 따라 모든 관련 타일을 그릴 코드가 있습니다.
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로 이동하기 전에 모든 자산을 할당합니다. :) –