mes exigences:fond Libgdx et de premier plan en une seule étape
- fond remplissage écran physique complet (étirement si nécessaire)
- rapport d'aspect apanage des actifs de premier plan (travail avec une largeur virtuelle et hauteur)
Pour cela, j'utilise deux étapes dans mon écran comme indiqué dans le code ci-dessous.
public void render(float delta) {
backgroundStage.act(delta);
backgroundStage.draw();
foregroundStage.act(delta);
foregroundStage.draw();
}
public void resize(int width, int height) {
background.setWidth(width);
background.setHeight(height);
backgroundStage.setViewport(width, height, true);
foregroundStage.setViewport(MainGame.WIDTH, MainGame.HEIGHT, true);
foregroundStage.getCamera().position.set(-foregroundStage.getGutterWidth(),-foregroundStage.getGutterHeight(),0);
}
Dans tous les tutoriels que j'ai lus, je n'ai vu qu'une seule étape utilisée pour chaque écran. Alors, comment puis-je remplir les deux exigences en une seule étape? Est-ce trop cher d'avoir des étapes séparées? (J'ai lu que les objets SpriteBatch sont lourds!)
Voilà comment je résolu le problème:
Pour se débarrasser de l'étape de fond, je mis à jour mes rendre et redimensionnez fonctionne comme suit. Fondamentalement, j'ai décalé le coin inférieur droit de l'arrière-plan à (-gutterWidth, -gutterHeight) et ajouté deux fois les valeurs de largeur et de hauteur de la gouttière à la largeur de la région et la hauteur de la région de texture. La scène est maintenant disparu :-)
public void render(float delta) {
Gdx.gl.glClearColor(0, 1, 0, 0.5f);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
foregroundStage.getSpriteBatch().begin();
foregroundStage.getSpriteBatch().draw(backgroundImage,-gw,-gh,backgroundImage.getRegionWidth()+2*gw,backgroundImage.getRegionHeight()+2*gh);
foregroundStage.getSpriteBatch().end();
foregroundStage.act(delta);
foregroundStage.draw();
public void resize(int width, int height) {
screenW = width;
screenH = height;
foregroundStage.setViewport(MainGame.WIDTH, MainGame.HEIGHT, true);
gw = foregroundStage.getGutterWidth();
gh = foregroundStage.getGutterHeight();
foregroundStage.getCamera().translate(-gw,-gh,0);
}
Merci . Mais je veux des fenêtres différentes pour le fond et le premier plan comme je l'ai écrit dans mon code ci-dessus. Comment puis-je y parvenir sans calculer moi-même la taille du premier plan? – coolscitist
Vous pouvez définir la fenêtre au premier plan, puis redimensionner les limites de l'image d'arrière-plan pour qu'elles correspondent à la taille souhaitée. Vous pourriez même rendre l'image séparée de la scène en tant que région de texture, ce qui vous permettrait de la restituer comme vous le souhaitez. Il y a quelques options, mais il n'y a aucune raison d'utiliser deux étapes pour le faire. À moins que vous ne projetiez de faire une tonne de choses (en plus de votre image de fond) en arrière-plan, alors deux étapes pourraient avoir plus de sens. – Jyro117
Oui, je l'ai fait. J'ai ajouté décalé l'arrière-plan à (-gutterWidth, -gutterHeight) et ajouté deux fois les valeurs de largeur et hauteur de la gouttière à la largeur de la région et la hauteur de la région de texture. La scène est partie maintenant :-) – coolscitist