4

我是 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
     .
}
4

3 回答 3

8

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

您应该查看libgdx 屏幕和游戏类 wiki 页面。用法应该是这样的:

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
}
于 2012-07-25T13:46:26.640 回答
5

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

于 2012-07-25T20:13:14.680 回答
3

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

顺便说一句:最佳实践是使用类 Screen 渲染事物。

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

于 2013-11-29T07:56:44.653 回答