正确显示exp栏

时间:2014-02-17 03:02:37

标签: java lwjgl

我最近开始搞乱LWJGL,我正在做一个小游戏来测试一些东西。我想尝试制作一个EXP吧,并认为它会相当容易。我几乎完成了它,直到遇到一个大问题。该问题正确显示填满屏幕的exp栏。

游戏窗口的宽度为1280像素,高度为720像素。 EXP栏位于窗口的最底部,高10像素,横跨窗口的整个宽度。随着等级的增加,升级所需的exp量也会增加。我需要一些帮助来显示您目前拥有的exp数量。首次启动时,需要100 exp才能升级。例如,假设我有50个exp。我需要显示50%填充的exp栏。我要求一个公式来做到这一点。

我试着在互联网上寻找答案,但没有一个能够奏效,尽管有些人觉得它们的效果会很好。

呈现填充的exp的当前代码:

glColor3f(1f, 0f, 1f);
glBegin(GL_QUADS);
    glVertex2i(x, y); // Upper Left
    glVertex2i(x, y); //Upper Right
    glVertex2i(x, y + height); //Bottom Right
    glVertex2i(x, y + height); //Bottom Left
glEnd();

1 个答案:

答案 0 :(得分:1)

查找玩家拥有的体验百分比,并将其乘以条形图的最大宽度。

int currentXP;
int lastLevelXP;
int nextLevelXP;
int xpBetweenLevels = nextLevelXP - lastLevelXP;
int xpSinceLevelUp = currentXP - lastLevelXP;
float percentageOfXP = xpSinceLevelUp / (float) xpBetweenLevels;
int barWidth = (int) (percentageOfXP * maxWidth); // maxWidth would be the screen's width

// rendering must use 4 unique points
glColor3f(1f, 0f, 1f);
glBegin(GL_QUADS);
    glVertex2i(x, y);
    glVertex2i(x + (percentageOfXP * maxWidth), y);
    glVertex2i(x + (percentageOfXP * maxWidth), y + height); // where y = 10
    glVertex2i(x, y + height);
glEnd();

这样,如果玩家处于等级2,从70 XP开始,有120 XP,等级3从170 XP开始:

currentXP = 120
lastLevelXP = 70
nextLevelXP = 170
xpBetweenLevels = 170 - 70 = 100
xpSinceLevelUp = 120 - 70 = 50
percentageOfXP = 50 / 100 = 0.5

barWidth = 0.5 * 1280 = 640 = half of screen's width

另请注意,虽然您的代码只使用了2个不同的顶点,这会产生一条线,但是我使用4来绘制一个四边形。

修改

由于您的代码将每个级别的XP重置为0,并且只是增加了所需的数量,因此唯一需要的修改是将lastLevelXP设置为0并将nextLevelXP设置为升级所需的XP数量。因此,xpBetweenLevels变为nextLevelXP - 0,这是升级所需的总XP;同样,xpSinceLevelUp变为currentXP。您需要做的就是用

替换非渲染代码
int currentXP;
int xpNeeded;
float percentageOfXP = currentXP / (float) xpNeeded;
int barWidth = (int) (percentageOfXP * maxWidth);