gpt4 book ai didi

java - LibGDX 健康栏 : How can i improve it

转载 作者:行者123 更新时间:2023-12-01 17:05:31 25 4
gpt4 key购买 nike

我一直在使用 LibGDX 制作一个简单的游戏,现在我尝试在我的游戏中添加一个健康栏。我已经成功在游戏中添加了生命条,目前运行良好。

然而,问题是如何像专业人士一样进一步修改这段代码。我仍在学习过程中,所以我一直在尝试如何进一步使其看起来更好、简洁、专业,但无法进一步提供。

我已在下面粘贴了我的 HealthBar 类代码。我将不胜感激任何建议,以便我在将来编写任何代码时能够更好、更高效地思考。

public class HealthBar extends Actor{

protected float MaxHealthX;
protected static float HealthBarY= 36;
float decreaseRate = 0;
float addHealth = 0;
float deductHealth = 0;
ShapeRenderer sr;
static private boolean projectionMatrixSet;
private boolean isHitE = false;
private boolean isHitI = false;
float totalSubractedHP = 0;
float totalAddedHP = 0;

public HealthBar(){

sr = new ShapeRenderer();
projectionMatrixSet = false;

}

@Override
public void draw(Batch batch, float parentAlpha){

//if a main character is hit by enemy
if(isHitE==true){
//subtractHP();
totalSubractedHP += 1;
isHitE = false;
}

if(isHitI==true){
totalAddedHP += 10;
isHitI = false;
}
MaxHealthX=296-decreaseRate+totalAddedHP-totalSubractedHP;

batch.end();
if(!projectionMatrixSet){
sr.setProjectionMatrix(batch.getProjectionMatrix());
}
sr.begin(ShapeType.Filled);
sr.setColor(Color.BLACK);
sr.rect(40,650,300,40);

if(isOutOfHealth() == false){
sr.setColor(Color.RED);
sr.rect(42, 652, MaxHealthX, HealthBarY);
}

sr.end();

batch.begin();

}

//updating health decrease rate as time passes by
public void updateHealthBar(float delta) {
decreaseRate += 10*delta;

}

//checks whether health is greater than zero
public boolean isOutOfHealth(){
if(MaxHealthX > 0){
return false;
}else{
return true;
}
}


//checking if hit by enemy
public boolean isHitByEnemy(){
isHitE = true;
return isHitE;
}

public boolean isHitByItem(){
isHitI = true;
return isHitI;
}

最佳答案

ShapeRenderer 通常仅用于调试。在残局中,大多数情况下仅使用 SpriteBatch
draw方法中,您调用batch.end(),它又调用flush()。这个方法有点“重”,只有在确实有必要时才应该调用。因此,在您的情况下,最好使用 batch 而不是 ShapeRenderer 来绘制整个 HealthBar
更好的是:
使用 Scene2D Progressbar,它应该正是您正在寻找的。
ProgressBar 需要一个 range(例如 min = 0,max = 100)、一个 stepSize(例如 1.0)、一个 boolean垂直,和一个ProgressBarStyle
您的情况下的 ProgressBarStyle 只需要 2 个 Drawable:
背景
禁用背景

然后,您可以使用 setValue(maxHealthX),这会将 background 设置为 0-maxHealthX(四舍五入到最接近的 stepSize)和来自 maxHealthX 进度条末尾的 disabledBackground

关于java - LibGDX 健康栏 : How can i improve it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25757027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com