【问题标题】:LibGDX - Splash Screen isn't switching to a screen after it is clickedLibGDX - 单击后启动画面未切换到屏幕
【发布时间】:2017-01-14 22:13:08
【问题描述】:

在过去的 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 中弄乱过屏幕。

【问题讨论】:

    标签: java libgdx


    【解决方案1】:

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

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

    【讨论】:

    • 成功了!太感谢了。我觉得自己太笨了,不敢相信我忘记添加了。
    猜你喜欢
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多