ฉันทำแบบนี้แล้ว:
ก่อนอื่นฉันได้สร้าง Class ใหม่ที่ชื่อว่า Hud มันใช้Disposable
เพราะการจัดการทรัพยากร จากนั้นคุณต้องกำหนดStage
เนื้อหาของคุณและใหม่viewport
เพราะจะมีการใช้กล้องใหม่ คุณจำเป็นต้องกำหนดใหม่ที่คุณสามารถเพิ่มTable
Stage
คุณสามารถเพิ่มเนื้อหาของคุณในสิ่งที่table
ชอบได้ตามปกติ ส่วนที่เหลือของรหัสที่ฉันจะใส่เพื่อแสดงวิธีการทำงานเป็นเกมที่เฉพาะเจาะจงดังนั้นเพียงแค่ไม่สนใจมัน
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;
}
}
และจากนั้นใน Playscreen เช่นนี้:
ก่อนอื่นคุณต้องมีตัวแปรเพื่ออ้างอิงฮัดของคุณเช่น:
private Hud hud;
จากนั้นใน Constructor คุณสร้างอินสแตนซ์ใหม่ของคลาส:
hud= new Hud();
ในวิธีการอัพเดทคุณต้องใส่โค้ดเหล่านี้เนื่องจากฉันคิดว่าคุณต้องการแสดงข้อมูลเกมบางอย่างเช่นคะแนนหรือชีวิตที่เหลือ:
hud.update();
ในโหมด render- ทำสิ่งนี้:
//Set batch to now draw what the Hud camera sees.
game.batch.setProjectionMatrix(hud.stage.getCamera().combined);
hud.stage.draw();
และท้ายที่สุดอย่าลืมทิ้งฮัดของคุณในวิธีการกำจัด
ฉันหวังว่าจะช่วย
camera.project(Vector3 screenCoords)
เพื่อโปรเจ็กต์บางอย่างตั้งแต่พิกัดโลกไปจนถึงสายสกรีน