我最近开始搞乱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();
答案 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);