java - studio - libGdx: Sprite no se dibuja cuando hay una etapa
libgdx ubuntu (2)
Estoy seguro de que me estoy perdiendo algo MUY obvio aquí, pero soy principiante así que no me aplasten por favor. Mi problema es que tengo una etapa que tiene una ventana pequeña que la pantalla. Ahora también quiero dibujar un Sprite en la pantalla directamente usando Sprite.draw (SpriteBatch). La posición del Sprite y el escenario no se superponen. El escenario está bien dibujado, pero el Sprite no está visible. Cuando comento la parte stage.draw () en el método de representación, entonces el Sprite es visible.
Código: este es mi método de renderizado:
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0.851f, 0.894f, 0.992f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
stage.act(delta);
batch.setProjectionMatrix(camera.combined);
batch.begin();
stage.draw();
logoSprite.draw(batch);
batch.end();
}
Aquí, inicializo la cámara y el escenario (stageHeight es un int que tiene solo 3/5 * la altura de la pantalla):
camera = new OrthographicCamera();
camera.setToOrtho(false, SwapItGame.WIDTH, SwapItGame.HEIGHT);
stage = new Stage();
stage.setViewport(1080, stageHeight, true, 0, 0, 1080, stageHeight); //The button part of the menu takes up 3 fifth of the Height of hte screen
stage.setCamera(camera);
Aquí inicializo mi Sprite (el valor de posición para el sprite es bastante complejo, solo ignóralo. Ciertamente está sobre el escenario):
logoSprite = skin.getSprite("logo");
logoSprite.setPosition((SwapItGame.WIDTH-logoSprite.getWidth())/2, (SwapItGame.HEIGHT-stageHeight-logoSprite.getHeight())/2 + stageHeight);
¿Es imposible tener un Sprite y un escenario en la misma pantalla? ¿O estoy haciendo algo fundamentalmente malo?
Intenta moverte
stage.draw();
arriba de las operaciones por lotes
stage.draw();
batch.setProjectionMatrix(camera.combined);
batch.begin();
logoSprite.draw(batch);
batch.end();
Sé que esto es viejo, pero en el caso de que no pueda o no quiera mover su método stage.draw (), simplemente llame a batch.end () justo antes de su stage.draw (), luego reinicie su lote Inmediatamente ... Estoy usando estados de pantalla de juego separados para diferentes cosas en mi juego e intenté mover mi stage.draw () y solo rompió otras cosas dentro de mi clase, así que finalmente probé esto, que funcionó como un encanto y puede ayudar a alguien si la solución anterior no funciona fácilmente.
batch.end();
stage.draw();
batch.begin();