programacion para khan introduccion figuras dibujos dibujo dibujar codigos animaciones animacion java libgdx stage

para - javascript khan



No se puede dibujar una imagen y una etapa de nueve parche al mismo tiempo (1)

Cada vez que trato de dibujar una imagen de nueve parche y un escenario, se dibuja lo último que se llama. Intenté usar una cámara ortográfica pero no tuve éxito. Lo que he intentado:

batch.setProjectionMatrix(camera.combined); ninePatch.draw(batch, xPos, yPos, width, height); stage.act(delta); stage.draw(); camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); stage.setCamera(camera)

EDITAR: El código

La clase CreateQuiz

public class CreateQuiz implements Screen{ public CreateQuiz(Quiz quiz){ this.quiz = quiz; } private Quiz quiz; private FallDownPanel fallDownPanel; private OrthographicCamera camera; @Override public void render(float delta) { Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); quiz.beginBatch(); fallDownPanel.render(quiz.getSpriteBatch(), delta); quiz.endBatch(); } @Override public void resize(int width, int height) { } @Override public void show() { fallDownPanel = new FallDownPanel(FallDownPanel.START_LOWER_SIDE, 200, quiz.getTextureAtlas().createPatch("fallDownWindow")); Stage stage = new Stage(fallDownPanel.getWidth(), fallDownPanel.getHeight(), false); TextFieldStyle style = quiz.getGreenTextFieldStyle(); style.font.scale(-0.30f); TextFieldQuiz test = new TextFieldQuiz("Hej åäö 123 !", style, 0, 2, 400, 16); test.setTextFieldListener(new TextFieldListener() { @Override public void keyTyped (TextField textField, char key) { if (key == ''/n'') { textField.getOnscreenKeyboard().show(false); } } }); stage.addActor(test); Gdx.input.setInputProcessor(stage); fallDownPanel.setStage(stage); camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); stage.setCamera(camera); fallDownPanel.setCamera(camera); } @Override public void hide() { } @Override public void pause() { } @Override public void resume() { } @Override public void dispose() { } }

The FallDownPanel.class

public class FallDownPanel { //With repeat public FallDownPanel(int startSide, int size, NinePatch ninePatch){ Tween.registerAccessor(FallDownPanel.class, new FallDownPanelTween()); Tween.registerAccessor(Widget.class, new WidgetTween()); tweenManager = new TweenManager(); final int screenWidth = Gdx.graphics.getWidth(); final int screenHeight = Gdx.graphics.getHeight(); int target = 0; int tweenType = 0; if(startSide == START_LEFT_SIDE){ setSize(size, screenHeight); xPos = -size; yPos = 0; target = 0; tweenType = FallDownPanelTween.POSITION_X; } else if(startSide == START_RIGHT_SIDE){ setSize(size, screenHeight); xPos = screenWidth; yPos = 0; target = screenWidth - size; tweenType = FallDownPanelTween.POSITION_X; } else if(startSide == START_UPPER_SIDE){ setSize(screenWidth, size); xPos = 0; yPos = screenHeight + size; target = screenHeight - size; tweenType = FallDownPanelTween.POSITION_Y; } else if(startSide == START_LOWER_SIDE){ setSize(screenWidth, size); xPos = 0; yPos = -size; target = 0; tweenType = FallDownPanelTween.POSITION_Y; } Tween.to(this, tweenType, 1).target(target).start(tweenManager); this.tweenType = tweenType; this.startSide = startSide; this.ninePatch = ninePatch; } private TweenManager tweenManager; private NinePatch ninePatch; private Stage stage; private OrthographicCamera camera; private float xPos, yPos; private int width, height; private int tweenType; private int startSide; public static final int START_LEFT_SIDE = 0, START_RIGHT_SIDE = 1, START_UPPER_SIDE = 2, START_LOWER_SIDE = 3; public void render(SpriteBatch batch, float delta){ tweenManager.update(delta); batch.setProjectionMatrix(camera.combined); ninePatch.draw(batch, xPos, yPos, width, height); stage.act(delta); stage.draw(); } public void setX(float x){ this.xPos = x; } public void setY(float y){ this.yPos = y; } public float getX(){ return xPos; } public float getY(){ return yPos; } public float getWidth(){ return width; } public float getHeight(){ return height; } private void setSize(int w, int h){ width = w; height = h; } public Stage getStage() { return stage; } public void setStage(Stage stage) { this.stage = stage; startWidgetTweens(); } private void startWidgetTweens(){ float size = getShortestSide(); Array<Actor> actors = stage.getActors(); for(int i = 0; i < actors.size; i++){ Widget w = (Widget) actors.get(i); Tween.to(w, tweenType, 1).target(0).start(tweenManager); } } private float getShortestSide() { if(startSide == START_LEFT_SIDE){ return width; } else if(startSide == START_RIGHT_SIDE){ return width; } else if(startSide == START_UPPER_SIDE){ return height; } else if(startSide == START_LOWER_SIDE){ return height; } return -1; } public void setCamera(OrthographicCamera camera) { this.camera = camera; } }


Siempre asegúrese de tener solo un Renderer activo a la vez. Los Renderer s son:

  • Batch
  • SpriteBatch
  • ShapeRenderer
  • Box2DDebugRenderer si no estoy equivocado
  • ModelBatch para 3D

Espero no haber olvidado uno.
Asegúrese de llamar siempre a end() para el activo, antes de llamar a begin() para uno nuevo.
Recuerde también que un Stage tiene su propio SpriteBatch y llama a begin() para este SpriteBatch , si llama a stage.draw() . Así que asegúrese de end() el Renderer activo, antes de stage.draw() .
Si necesita un ShapeRenderer o cualquier otro procesador para dibujar un Actor (tal vez causa de la depuración), tiene que finalizar el SpriteBatch la stage , que obtiene con el método draw() . Asegúrese de begin() nuevamente al final del método.
Espero que esté bastante claro.