2017-01-14 4 views
0

застрял в этом раздражающем вопросе в течение последних 1 - 2 часов. Интересно, может ли кто-нибудь помочь мне. Поэтому я добавил заставку для моей скоро законченной игры. Я следил за этим учебным пособием, которое я нашел онлайн http://www.caindev.com/2012/06/04/libgdx-splash-screen-image-tutorial.html, и это было именно то, что я хотел. Мне нужен был экран заставки для загрузки и пребывания до тех пор, пока пользователь не нажмет экран. Я сделал все, что сказал учебник, но как только изображение с моего экрана заставки будет загружено, оно не переключится на экран MainMenu, когда оно будет нажато, изображение останется там замороженным.LibGDX - Splash Screen не переключается на экран после его нажатия.

Вот мой код: MyGame

package com.jack.mygame; 
import com.badlogic.gdx.Game; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.Screen; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.jack.MyGame.screens.GameScreen; 
import com.jack.MyGame.splash.SplashScreen; 

public class MyGame extends Game { 

    public static int nWidth; 
    public static int nHeight; 
    private Game game; 

    public MyGame() { 
     game = this; 
    } 

    @Override 
    public void create() { 
     nWidth = Gdx.graphics.getWidth(); 
     nHeight = Gdx.graphics.getHeight(); 

     setScreen(new SplashScreen(this)); 
    } 

    @Override 
    public void render() { 
     super.render(); 
    } 
} 

Вот мой код SplashScreen:

package com.jack.mygame.splash; 

import com.badlogic.gdx.Gdx; 
import static com.badlogic.gdx.Gdx.gl; 
import com.badlogic.gdx.Screen; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.jack.mygame.MyGame; 
import com.jack.MyGame.screens.MainMenu; 

public class SplashScreen implements Screen { 

    private Texture logo; 
    private SpriteBatch spriteBatch; 
    private MyGame game; 

    public SplashScreen(MyGame game) { 
     this.game = game; 
    } 

    @Override 
    public void show() { 

     logo = new Texture(Gdx.files.internal("logo.png")); 
     spriteBatch = new SpriteBatch(); 
    } 

    @Override 
    public void render(float f) { 
     handleInput(); 

     GL20 gl = Gdx.graphics.getGL20(); 
     gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     spriteBatch.begin(); 
     spriteBatch.draw(logo, 0, 0, MyGame.nWidth, MyGame.nHeight); 
     spriteBatch.end(); 
    } 

    private void handleInput() { 
     if (Gdx.input.justTouched()) { 
      System.out.println("clicked"); 
      game.setScreen(new MainMenu(game)); 
     } 
    } 

    @Override 
    public void resize(int i, int i1) { 
    } 

    @Override 
    public void pause() { 
    } 

    @Override 
    public void resume() { 
    } 

    @Override 
    public void hide() { 
    } 

    @Override 
    public void dispose() { 
    } 

} 

Наконец, мой код MainMenu:

package com.jack.mygame.screens; 

import com.badlogic.gdx.Game; 
import com.badlogic.gdx.Screen; 
import com.jack.mygame.MyGame; 

public class MainMenu implements Screen { 

    private Game game; 

    public MainMenu(Game game) { 
     this.game = game; 
    } 

    @Override 
    public void show() { 
    } 

    @Override 
    public void render(float f) { 

    } 

    @Override 
    public void resize(int i, int i1) { 
    } 

    @Override 
    public void pause() { 
    } 

    @Override 
    public void resume() { 
    } 

    @Override 
    public void hide() { 
    } 

    @Override 
    public void dispose() { 
    } 

} 

Любая помощь будет удивительно , Раньше не смешивались с экранами в LibGDX.

ответ

1

Я протестировал этот код, и для меня он работает. Единственная проблема заключается в том, что ваш класс MainMenu не отображает никакого представления. Поэтому, когда вы нажимаете splashscreen, вы не обновляете то, что отображается на экране. Добавьте, например, этот код в классе MainMenu, чтобы очистить экран от вашего логотипа заставки:

@Override 
public void render(float f) { 
    GL20 gl = Gdx.graphics.getGL20(); 
    gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
} 
+0

Это сработало! Огромное спасибо. Я чувствую себя настолько глупым, что не могу поверить, что забыл добавить это. – Yeah