Je l'ai fait comme ça:
J'ai d'abord créé une nouvelle classe appelée Hud. Il implémente à Disposable
cause de la gestion des ressources. Ensuite, vous devez définir un Stage
pour votre contenu et un nouveau viewport
car un nouvel appareil photo sera utilisé. Vous devez définir un nouveau Table
que vous pouvez ajouter au Stage
. Vous pouvez ajouter votre contenu table
comme d'habitude. Le reste du code que je mettrai pour montrer comment cela fonctionne est spécifique au jeu, alors ignorez-le.
public class Hud implements Disposable{
public Stage stage;
private Viewport viewport;
//score && time tracking variables
private Integer worldTimer;
private float timeCount;
private static Integer score;
private boolean timeUp;
//Scene2D Widgets
private Label countdownLabel, timeLabel, linkLabel;
private static Label scoreLabel;
public Hud (SpriteBatch sb){
//define tracking variables
worldTimer = 250;
timeCount = 0;
score = 0;
//setup the HUD viewport using a new camera seperate from gamecam
//define stage using that viewport and games spritebatch
viewport = new FitViewport(GetTheTriforce.V_WIDTH, GetTheTriforce.V_HEIGHT, new OrthographicCamera());
stage = new Stage(viewport, sb);
//define labels using the String, and a Label style consisting of a font and color
countdownLabel = new Label(String.format("%03d", worldTimer), new Label.LabelStyle(new BitmapFont(), Color.WHITE));
scoreLabel =new Label(String.format("%06d", score), new Label.LabelStyle(new BitmapFont(), Color.WHITE));
timeLabel = new Label("LEFTOVER TIME", new Label.LabelStyle(new BitmapFont(), Color.WHITE));
linkLabel = new Label("POINTS", new Label.LabelStyle(new BitmapFont(), Color.WHITE));
//define a table used to organize hud's labels
Table table = new Table();
table.top();
table.setFillParent(true);
//add labels to table, padding the top, and giving them all equal width with expandX
table.add(linkLabel).expandX().padTop(10);
table.add(timeLabel).expandX().padTop(10);
table.row();
table.add(scoreLabel).expandX();
table.add(countdownLabel).expandX();
//add table to the stage
stage.addActor(table);
}
public void update(float dt){
timeCount += dt;
if(timeCount >= 1){
if (worldTimer > 0) {
worldTimer--;
} else {
timeUp = true;
}
countdownLabel.setText(String.format("%03d", worldTimer));
timeCount = 0;
}
}
public static void addScore(int value){
score += value;
scoreLabel.setText(String.format("%06d", score));
}
@Override
public void dispose() { stage.dispose(); }
public boolean isTimeUp() { return timeUp; }
public static Label getScoreLabel() {
return scoreLabel;
}
public static Integer getScore() {
return score;
}
}
puis dans le Playscreen comme ceci:
tout d'abord, vous avez besoin d'une variable pour référencer votre hud comme:
private Hud hud;
puis dans le constructeur vous créez une nouvelle instance de votre classe:
hud= new Hud();
dans la méthode de mise à jour, vous devez mettre ces lignes de code car je pense que vous voulez afficher des informations sur le jeu comme les points ou les vies restantes:
hud.update();
dans la méthode de rendu, faites ceci:
//Set batch to now draw what the Hud camera sees.
game.batch.setProjectionMatrix(hud.stage.getCamera().combined);
hud.stage.draw();
et à la fin n'oubliez pas de jeter votre hud dans la méthode de disposer
j'espère que ça aide
camera.project(Vector3 screenCoords)
pour projeter quelque chose des coordonnées du monde aux cordons d'écran.