所以我试图为玩家制作一个健康栏游戏,但每当我使用交叉产品或任何其他数学方法时,百分比结果都是0.0
...
这是处理此问题的.java文件:
package com.game.graphics;
import com.game.entity.mob.Mob;
public class HUD {
Mob target;
Sprite healthbar;
Sprite bgBar;
double percent_normal;
public HUD(Mob target) {
this.target = target;
bgBar = new Sprite(0xff777777, 104, 8);
healthbar = new Sprite(0xffFF0000, 100, 6);
}
public void update() {
percent_normal = target.getHealth() / 100;
percent_normal *= target.getMaxHealth();
}
public void printData() {
System.out.println("Normal(" + percent_normal + ")");
// if the targets's health is any lower than the max health then this seems to always return 0
}
public void render(Screen s) {
s.renderSprite(5, 5, bgBar, false);
s.renderSprite(7, 6, new Sprite(0xffFF0000, (int) percent_normal, 6), false);
}
}
我不确定我的数学是完全关闭还是我是否会出现这种可怕的错误。我已经尝试过如何计算它无济于事,这就是我在这里提出这个问题的原因。
答案 0 :(得分:8)
不应该这样吗? :
public void update() {
percent_normal = target.getHealth() / target.getMaxHealth();
percent_normal *= 100;
}
E.g。 :玩家有120个生命值,最大生命值为180.这是120 / 180 = 0.66666666666
,它以百分比0.66666666666 * 100 = 66,66...%
代替120 / 100 = 1.2
,并将其乘以target.getMaxHealth()
,即180,会导致(1.2 * 180) > 100
。
答案 1 :(得分:5)
您计算百分比的方式似乎已经过时了。 要计算X与Y相比的百分比,您必须这样做:
double result = X/Y;
result = result * 100;
因此,在这种情况下,您的代码应该看起来像
public void update() {
percent_normal = target.getHealth() / target.getMaxHealth();
percent_normal *= 100;
}
你总是得到0.0的原因是因为int 100.我相信target.getHealth()/100
将返回一个0.x形式的值,并在转换为0之前变为int 0双
答案 2 :(得分:-1)
基本上计算我们使用它的百分比,
百分比=(a * b)/ 100
所以在你的情况下,update()方法是错误的,并替换为下面的代码,
public void update()
{
percent_normal = target.getHealth() / target.getMaxHealth();
percent_normal * = 100;
}
以下是一个示例,仅供参考 - http://www.flowerbrackets.com/java-calculate-percentage/