Libgdx屏幕未能交换。

4
我刚接触Libgdx,并写了一个类来扩展Game类。问题是,从Game中的setScreen()方法未能交换屏幕,因为在我设置屏幕之后,游戏仍然只呈现Game类的render方法中的内容,而不是屏幕类的render方法中的内容。以下是代码:
如果我运行此代码,即使在用户点击屏幕时更改屏幕,我也只会得到红色屏幕。
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个回答

8
你没有正确使用游戏类。在这里不应该进行任何渲染,这是屏幕的任务。
你应该查看libgdx屏幕和游戏类维基页面。用法应该像这样:
public class MyGame extends Game {
        @Override
        public void create() {
                setScreen(new RedScreen(this));              
        }
 }

并且出现了一个像这样的红屏:
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
}

并且需要像这样拥有一个绿色屏幕:
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
}

5

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


3
我找到了根本原因。实际上,在你的游戏中绘制其他内容之前,必须在Game的render()方法中添加super.render()。如果不这样做,你重写的render方法将不会调用Screen的render()方法。
顺便说一下:最好的做法是使用Screen类来渲染物体。
请注意:即使在Game中有一个空的render()方法也会导致此问题。因此,请删除你的Game中的render()方法或在其中添加super.render()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接