17.8 Interface pour le Boss
Bounce
Puisqu'il s'agit d'un ennemi spécial, nous voulons ajouter une composante pour l'interface au moment du boss. Nous aurons recours à une technique similaire à la technique du nine slice explorée dans un exercice précédent afin de représenter la barre de vie du boss.
LibGDX donne accès à la méthode TiledDrawable
qui permet de dessiner une image à répétition.
Étapes à suivre
- ajoutez la classe
BossHealthBar
- chargez les textures:
objects/boss_icon.png
ui/health_tiled.png
- ajoutez une instance de
TiledDrawable
qui permet de dessinerui/health_tiled.png
à répétition.- affichez les textures à l'intérieur de la méthode
render
/* BossHealthBar.java */
package com.tutorialquest.ui;
// import ..
public class BossHealthBar {
public static int WIDTH = 256;
public static int HEIGHT = 24;
public static int TEXTURE_SIZE = 24;
private TextureRegion[][] healtBarTextures;
private Texture iconTexture;
private float fillAmount = 1;
protected Texture arrowTexture;
protected TextureRegion[][] textures;
private TiledDrawable backTiledDrawable;
private TiledDrawable fillTiledDrawable;
private boolean enabled = false;
public BossHealthBar(){
iconTexture = new Texture("objects/boss_icon.png");
textures = TextureRegion.split(new Texture("ui/health_tiled.png"), TEXTURE_SIZE/3, TEXTURE_SIZE);
backTiledDrawable = new TiledDrawable(textures[0][1]);
fillTiledDrawable = new TiledDrawable(textures[0][4]);
}
public void enable(boolean enabled)
{
this.enabled = enabled;
}
public void render(SpriteBatch spriteBatch, Vector2 position)
{
if(!enabled) return;
spriteBatch.begin();
backTiledDrawable.draw(
spriteBatch,
position.x,
position.y,
WIDTH,
HEIGHT);
spriteBatch.end();
spriteBatch.begin();
fillTiledDrawable.draw(
spriteBatch,
position.x,
position.y,
WIDTH * fillAmount,
HEIGHT);
spriteBatch.end();
spriteBatch.begin();
spriteBatch.draw(
iconTexture,
position.x - 4,
position.y + 4,
16,
16);
spriteBatch.end();
}
}
Étapes à suivre
Utilisez la technique de l'observateur explique dans l'exercice précédent afin de mettre à jour l'interface lorsque l'ennemi prend des dommages.
/* BossHealthBar.java */
package com.tutorialquest.ui;
// import ..
public class BossHealthBar
{
public void onBossHealthChanged(Character character) {
fillAmount = character.health / character.maxHealth;
}
}
package com.tutorialquest.entities.boss;
// import ...
public class Boss extends Character {
@Override
public void start() {
super.start();
Game.hud.bossHealthBar.enable(true);
onHealthChangedHandler.subscribe(Game.hud::onBossHealthChanged);
Game.hud.onBossHealthChanged(this);
}
}
Étapes à suivre
- Ajoutez
BossHealthBar
au tableau de bord- incorporez a la méthode
render
/* HUD.java */
package com.tutorialquest.ui;
// import ..
public class HUD {
// AJOUT:
public BossHealthBar bossHealthBar = new BossHealthBar();
// ...
public void render() {
Vector2 position;
// ...
position = new Vector2(
camera.position.x - bossHealthBar.WIDTH/2,
camera.position.y -96);
bossHealthBar.render(spriteBatch, position);
}
}