Saya telah melakukannya seperti ini:
Pertama saya telah membuat Kelas baru yang disebut Hud. Ini diterapkan Disposable
karena manajemen sumber daya. Maka Anda perlu mendefinisikan Stage
untuk konten Anda dan yang baru viewport
karena kamera baru akan digunakan. Anda perlu menentukan yang baru Table
yang dapat Anda tambahkan ke Stage
. Anda dapat menambahkan konten Anda table
seperti biasa. Sisa kode yang akan saya tunjukkan untuk menunjukkan cara kerjanya adalah game spesifik jadi abaikan saja.
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;
}
}
dan kemudian di Playscreen seperti ini:
pertama-tama Anda memerlukan variabel untuk referensi hud Anda seperti:
private Hud hud;
dan kemudian di konstruktor Anda membuat instance baru dari kelas Anda:
hud= new Hud();
dalam metode pembaruan- Anda perlu meletakkan baris kode ini karena saya pikir Anda ingin menampilkan beberapa informasi permainan seperti poin atau sisa nyawa:
hud.update();
dalam metode render- lakukan ini:
//Set batch to now draw what the Hud camera sees.
game.batch.setProjectionMatrix(hud.stage.getCamera().combined);
hud.stage.draw();
dan pada akhirnya jangan lupa membuang hud Anda dalam metode pembuangan
saya harap itu membantu
camera.project(Vector3 screenCoords)
untuk memproyeksikan sesuatu dari koordinat dunia ke kabel layar.