9.1 HUD
Téléchargement fichiers référence desktop.zip core.src.zip core.assets.zip
L'interface graphique, rassemble les composantes essentielles à la compréhension du jeu, mais qui n'existe pas dans le monde jeu. En particulier, nous désignons le tableau de bord HUD (Head-up display) comme l'ensemble des informations affichées en périphérie de l'écran et renseignant le joueur concernant le score, points de vie de son personnage, nombre de munitions restantes, etc.
Interface graphique Secret of Mana^1

Afin de maintenir le tableau de bord à l'écran, il est avantageux d'utiliser une camera secondaire fixe différente de celle qui suit le personnage. Par la suite, il est simplement question d'afficher le résultat des deux caméras l'un par-dessus l'autre.
Étapes à suivre
- créez la classe
HealthBarutilise pour représenter la barre de vie
- Utilisez deux textures pour afficher le conteneur et le contenu de la barre de vie.
- Utilisez la classe
TextureRegionafin d'afficher une région proportionnelle aux nombres de points de vie restant à l'avatar- à l'intérieur de la classe
HUD
- créez la camera responsable pour le rendu de l'interface
- créez une nouvelle instance de
SpriteBatchréservé à l'interface- Incorporez l'élément
HealthBarau tableau de bord- incorporez l'interface à l'intérieur de
Game
/* HealthBar.java */
package com.tutorialquest.ui;
// import ..
public class HealthBar {
private TextureRegion[][] healtBarTextures;
private Texture hearthTexture;
private float fillAmount = 1;
public HealthBar(){
// Chargement des textures
healtBarTextures = TextureRegion.split(new Texture("ui/health_spritesheet.png"), 64, 16);
hearthTexture = new Texture("objects/heart_icon.png");
}
public void render(SpriteBatch spriteBatch, Vector2 position)
{
spriteBatch.begin();
// Affichage de l'arrière (Conteneur)
spriteBatch.draw(
healtBarTextures[0][0],
position.x,
position.y,
64,
16);
// Création de la région proportionnelle
// a la valeur de `fillAmount`
TextureRegion fillRegion = new TextureRegion(
healtBarTextures[0][1],
0,
0,
(int) (healtBarTextures[0][1].getRegionWidth() * fillAmount),
healtBarTextures[0][1].getRegionHeight());
// Affichage du contenu (Contenu)
spriteBatch.draw(
fillRegion,
position.x,
position.y,
fillRegion.getRegionWidth(),
fillRegion.getRegionHeight());
// Affichage de l'icône
spriteBatch.draw(
hearthTexture,
position.x - 4,
position.y,
16,
16);
spriteBatch.end();
}
// Mise à jour du bar de vie proportionnellement aux points de vie restants
public void onAvatarHealthChanged(Character character) {
fillAmount = character.health / character.maxHealth;
}
}/* HUD.java */
package com.tutorialquest.ui;
// import ..
public class HUD {
// Création d'une camera secondaire pour l'interface
private OrthographicCamera camera;
// Création du SpriteBatch
private SpriteBatch spriteBatch = new SpriteBatch();
// Création de la bar de vie
private HealthBar healthBar = new HealthBar();
public float getScaledWidth(){
return Game.VIEWPORT_WIDTH * camera.zoom;
}
public float getScaledHeight(){
return Game.VIEWPORT_HEIGHT * camera.zoom;
}
public HUD() {
// Configuration de la caméra (dimensions + zoom)
camera = new OrthographicCamera(
Game.VIEWPORT_WIDTH,
Game.VIEWPORT_HEIGHT);
camera.zoom = 1f/4f;
}
public void update(float deltaTime) {
camera.update();
}
public void render() {
spriteBatch.setProjectionMatrix(camera.combined);
Vector2 position;
// Puisque la camera désigne le centre de l'écran, calcul de la position dans le coin haut à gauche
position = new Vector2(
camera.position.x - (getScaledWidth()/2) + 8 ,
camera.position.y + (getScaledHeight()/2) - 12);
// Affichage de la barre de vie
healthBar.render(
spriteBatch,
position);
}
public void onAvatarHealthChanged(Character character) {
healthBar.onAvatarHealthChanged(character);
}
}/* Game.java */
package com.tutorialquest;
// AJOUT:
import com.tutorialquest.ui.HUD;
// import ...
public class Game extends ApplicationAdapter {
// ...
// AJOUT:
public static HUD hud;
@Override
public void create() {
Gdx.graphics.setWindowedMode(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
// AJOUT:
hud = new HUD();
}
@Override
public void render() {
GLUtils.glClearColor(CORNFLOWER_BLUE);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// ...
// AJOUT:
hud.update(Gdx.graphics.getDeltaTime());
// ...
// AJOUT:
hud.render();
}
}