stage.draw() не запускает actor.draw()
В scene2d метод stage.draw() должен запускать метод рисования всех актеров, но в моем случае он не запускает даже одного. Это мой код:
Настроить:
public IntroScreen(DirectedGame game)
{
super(game);
batch = new SpriteBatch();
camera = new OrthographicCamera(Constants.EDITOR_GUI_WIDTH, Constants.EDITOR_GUI_HEIGHT);
camera.position.set(0, 0, 0);
camera.setToOrtho(false);
camera.update();
stage = new Stage();
achisoft = new Text("AchiSoft");
achisoft.setVisible(true);
achisoft.size(200);
achisoft.setPosition(50, 50);
stage.addActor(achisoft);
Gdx.app.debug("stage","num_actors="+stage.getActors().size);
}
Метод визуализации:
public void show()
{
stage = new Stage();
}
@Override
public void render(float deltaTime)
{
getInputProcessor();
Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
stage.act(deltaTime);
stage.draw();
//Gdx.app.debug("render","deltaTime="+deltaTime);
}
Актер:
public class Text extends Actor
{
BitmapFont fontt;
String text;
Texture textur;
public Text(String cad)
{
text=cad;
fontt=Assets.instance.fonts.defaultBig;
Vector2 res = new Vector2();
res.set(512, 512);
Pixmap pixmap = new Pixmap(512, 512, Format.RGBA8888);
pixmap.setColor( 0, 1, 0, 1f );
pixmap.fillRectangle(1,1,256,256);
pixmap.setColor( 1, 0, 0, 1f );
pixmap.fillRectangle(257,257,256,256);
textur = new Texture(pixmap);
pixmap.dispose();
Gdx.app.debug("texture","entra");
}
@Override
public void draw(Batch batch, float parentAlpha)
{
fontt.setColor(1, 0, 0, 1); // red
fontt.draw(batch, text, 20, 20);
batch.draw(textur,50,50);
Gdx.app.debug("texture","se pinta");
}
@Override
public Actor hit(float x, float y, boolean touchable)
{
// TODO Auto-generated method stub
return super.hit(x, y, touchable);
}
}
Изменение размера:
@Override
public void resize(int width, int height)
{
stage.setViewport(width, height, false);
Gdx.app.debug("size",width+ " "+height);
camera.setToOrtho(false, width, height);
batch.setProjectionMatrix(camera.combined);
}
Строка отладки в конструкторе актера печатается, но строка отладки в отрисовке актера не является принтером. У меня есть тест для рисования в рендере текстуры с помощью batch.draw, и она работает нормально. Но актер никогда не рендерится.
1 ответ
Решение
Проблема заключалась в методе show(), который повторно инициализирует сцену. Show () вызывается после конструктора, поэтому на сцене нет ничего объявленного в конструкторе. Прокомментируйте строку, решив проблему.
public void show()
{
//stage = new Stage();
}
Кроме того, как я сказал Спрингрбуа, я установил камеру на камеру сцены на основную камеру.
stage.setCamera(camera);