首页 文章

Libgdx屏幕没有交换

提问于
浏览
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
     .
}

3 回答

  • 5

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

    你应该看看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
    }
    
  • 3

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

  • 8

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

    顺便说一句:最好的做法是使用类Screen渲染东西 .

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

相关问题