【问题标题】:Stage doesn't get drawn舞台未绘制
【发布时间】:2014-02-05 17:01:52
【问题描述】:

我在 render 方法中创建了一个超类:

public class SuperClass implements InputProcessor {

    public SuperClass(MyGame game) {

    }

    public void render() {

    }

    // InputProcessor overriden methods here
}

在一个子类中我重写了 render 方法:

public class SubClass extends SuperClass {

Stage stage;

public SubClass(MyGame game) {
    super(game);

    stage = new Stage(0, 0, false);

    skin = new Skin(Gdx.files.internal("data/uiskin.json"));

    Gdx.input.setInputProcessor(stage);

    Image image = new Image(new Texture(Gdx.files.internal("bg.png")));
    image.setPosition(0, 0);
    image.setWidth(800);
    image.setHeight(480);
    stage.addActor(image);

}

@Override
public void render() {

    stage.act(Gdx.graphics.getDeltaTime());

    stage.draw();

}

}

但是舞台没有画出来。我知道这一点是因为我希望看到背景图像,但它只是一个空白屏幕。

我在这里做错了什么?

【问题讨论】:

    标签: android libgdx stage


    【解决方案1】:

    您应该在 MyGame 渲染方法中调用您的 SuperClass 渲染方法。

    【讨论】:

    • 为什么?你怎么知道 SuperClass 做了什么?
    • @antiamoeba 就像我说的,SuperClass 的渲染方法里面什么都没有。
    【解决方案2】:

    你的 render() 方法是否在每个游戏循环中被调用? 我通常做的是创建一个扩展游戏的对象并设置一个屏幕。

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

    在实现 Screen 接口的 MainScreen 类中,我可以创建我的舞台:

    class MainScreen implements Screen {
    
        Stage stage = new Stage(0, 0);
    
    
        @Override
        public void dispose() {
            stage.dispose();
    
        }
    
        @Override
        public void hide() {
    
        }
    
        @Override
        public void pause() {
    
        }
    
        @Override
        public void render(float delta) {
    
    
            Gdx.gl.glClearColor(0, 0, 0, 1);
            Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    
    
            stage.act(Gdx.graphics.getDeltaTime());
            stage.draw();
    
    
        }
    
        @Override
        public void resize(int width, int height) {
    
        }
    
        @Override
        public void resume() {
        }
    
        @Override
        public void show() {
        stage = new Stage(0, 0, false);
    
             skin = new Skin(Gdx.files.internal("data/uiskin.json"));
    
             Gdx.input.setInputProcessor(stage);
    
             Image image = new Image(new Texture(Gdx.files.internal("bg.png")));
             image.setPosition(0, 0);
             image.setWidth(800);
             image.setHeight(480);
             stage.addActor(image);
    
        }
    
    }
    

    使用此代码,应在每个游戏循环中调用 render() 方法。

    【讨论】:

    • 在每个循环中都会调用渲染方法。我已经尝试过您之前的建议并且效果很好,但我想为这个新项目使用不同的方法。
    【解决方案3】:

    SubClass 构造函数中的行应该是:

    stage = new Stage(800, 480, false);
    

    或者你也可以这样做:

    stage = new Stage()
    

    但是您必须在resize(float, float) 中设置视口stage.setViewport(float, float, boolean)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 2013-09-14
      • 1970-01-01
      • 2014-02-14
      • 2021-10-05
      相关资源
      最近更新 更多