LibGDX - 我的启动画面没有显示

时间:2014-08-26 19:04:23

标签: java android eclipse libgdx

这是我的启动画面:

package com.badlogic.gdx.screens;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class Splash implements Screen {

private SpriteBatch batch;
private Sprite splash;


@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0,0,0,1); //sets clear color to black
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); //clear the batch

    batch.begin();
    splash.draw(batch);
    batch.end();
}

@Override
public void resize(int width, int height) {

}

@Override
public void show() {
    batch = new SpriteBatch();

    Texture texture = new Texture(Gdx.files.internal("badlogic.jpg"));
    splash = new Sprite(texture);
    splash.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

}

@Override
public void hide() {

}

@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void dispose() {

}

}

当我运行应用程序时,启动画面无法显示,它只是直接跳到游戏本身。我知道这一点,所以我不能完全确定问题是什么。我最好的猜测是,启动画面并没有链接到游戏画面,但我不确定。

继续主游戏屏幕,我还没有菜单。

public class SlingshotSteve extends Game {
   private OrthographicCamera camera;
   // Creates our 2D images
   private SpriteBatch batch;
   private TextureRegion backgroundTexture;
   private Texture texture;


@Override
public void create() {
    setScreen(new Splash());

    camera = new OrthographicCamera(1280, 720);

    batch = new SpriteBatch();

    Texture texture = new Texture(Gdx.files.internal("background.jpg"));
    backgroundTexture = new TextureRegion(texture, 0, 0, 500, 500);

    Music mp3Sound = Gdx.audio.newMusic(Gdx.files.internal("rain.mp3"));
    mp3Sound.setLooping(true);
    mp3Sound.play();



}


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

      Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

      camera.update();
      batch.setProjectionMatrix(camera.combined);

      batch.begin();
      batch.draw(backgroundTexture, 0, 0); 
      batch.end();

}

@Override
public void resize(int width, int height) {
    super.resize(width, height);

}

@Override
public void pause() {
    super.pause();

}

@Override
public void resume() {
    super.resume();

}

@Override
public void dispose() {
       batch.dispose();
       texture.dispose();
       super.dispose();

}
}

2 个答案:

答案 0 :(得分:0)

我相信你的问题就在这里

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

    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

     camera.update();
     batch.setProjectionMatrix(camera.combined);

     batch.begin();
     batch.draw(backgroundTexture, 0, 0); 
     batch.end();

}

我相信super.render()会调用当前屏幕的渲染方法,这意味着你的启动画面确实在绘制自己。但是,由于您之后绘制了背景,因此实际的启动画面不可见。

尝试在渲染方法中注释除super.render();之外的所有内容,并查看是否无法解决问题。

答案 1 :(得分:0)

这是因为您在render()课程中为Game提供了实施,而不是使用单独的Screen。如果您使用Screen,则不得在render()课程中为Game提供实施。

此外,您应该在构造函数中为Texture分配SplashScreen,而不是在show()方法中。但这只是一个小小的警告。