Libgdx屏幕没有交换

时间:2012-07-24 23:58:55

标签: java screen libgdx

我是Libgdx的新手,我写了一个扩展Game类的类,事实是来自Game的setScreen()方法没有交换屏幕,因为在我设置屏幕之后我的游戏仍然只渲染了来自游戏类的渲染方法,而不是屏幕类的渲染方法中的内容。这是代码:

如果运行此代码,即使我在用户触摸(点击)屏幕时更改屏幕,我也只会看到红色屏幕

class myGame extends Game
{
    GameScreen myOtherScreen;

    public void create() 
    {
       //create other screen
       myMenuScreen = new GameScreen();
    }

    public void render(float delta) 
    {   
        // change screens if screen touched
        if(Gdx.input.justTouched())
            setScreen(myOtherScreen);

            //render red screen
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    }
    .
    . //other methods
    .
}

// ======= Screen Class ========

public class GameScreen implements Screen
{
     @Override
     public void render(float delta) 
     {
            //render green screen
         Gdx.gl.glClearColor(0, 1, 0, 1);
         Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);      
     }
     .
     . //other methods
     .
}

3 个答案:

答案 0 :(得分:8)

您没有正确使用游戏类。你不应该在那里进行任何渲染,这就是屏幕的任务。

您应该查看libgdx screen and game classes wiki page。 用法应该是这样的:

public class MyGame extends Game {
        @Override
        public void create() {
                setScreen(new RedScreen(this));              
        }
 }

并有一个像这样的RedScreen:

public class RedScreen implements Screen {
    MyGame game; 
    public RedScreen(MyGame game){
            this.game = game;
    }

    public void render(float delta) {
        if(Gdx.input.justTouched())
            game.setScreen(new GreenScreen(game);

         //render red screen
         Gdx.gl.glClearColor(1, 0, 0, 1);
         Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    }
    // ... more screen functions
}

并拥有这样的GreenScreen:

public class GreenScreen implements Screen {
    MyGame game; 
    public MainMenuScreen(MyGame game){
            this.game = game;
    }

    public void render(float delta) {
         //render green screen
         Gdx.gl.glClearColor(0, 1, 0, 1);
         Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    }
    // ... more screen functions
}

答案 1 :(得分:5)

发现问题的解决方案是不使用游戏类中的render方法,实际上你实际上必须从类中删除它,相信我必须在其他屏幕类中进行所有渲染。

答案 2 :(得分:3)

我找到了根本原因。实际上,在游戏中绘制其他内容之前,您必须在游戏的super.render()方法中添加render()。如果没有,您覆盖的渲染方法将不会调用屏幕的render()方法。

顺便说一句:最佳做法是使用类Screen进行渲染。

请注意:即使游戏中的空render()也会导致此问题。因此,请在游戏中删除render()或在其中添加super.render()