LibGDX - 点击后,启动画面不会切换到屏幕

时间:2017-01-14 22:13:09

标签: java libgdx

在过去的1-2小时内一直困扰着这个恼人的问题。想知道是否有人可以帮助我。所以我为即将完成的游戏添加了一个启动画面。我正在按照我在网上找到的这个教程http://www.caindev.com/2012/06/04/libgdx-splash-screen-image-tutorial.html这正是我想要的。我需要一个启动画面来加载并保持到用户按下屏幕。我做了教程所要做的所有事情,但是一旦我的启动画面中的图像被加载,当按下图像时,它将不会切换到我的MainMenu屏幕。

这是我的代码: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 个答案:

答案 0 :(得分:1)

我测试了这段代码,对我来说它有效。唯一的问题是您的MainMenu类不呈现任何视图。因此,当您单击启动画面时,您无法刷新屏幕上显示的内容。例如,在MainMenu类中添加此代码,以清除闪屏徽标中的屏幕:

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