2014-02-17 19 views
0

我最近開始搞亂LWJGL,我正在做一個小遊戲來測試一些東西。我想嘗試做一個EXP欄,並認爲它會相當簡單。我幾乎完成了它,直到遇到大問題。這個問題正確地顯示了填充在屏幕上的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

發現玩家有什麼樣的經驗百分比,和酒吧的最大寬度乘以。

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,以及水平170 XP 3開始:

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); 
+0

替換這個代碼不包括我試圖解決這個問題,所以頂點是相同的。 – Kaperly

+0

另外,我覺得我搞砸了解釋。升級後,您的當前經驗值將變爲0,並且expNeeded將變爲新的更高的值。它不會繼續上升。如果問題不多,可否請更改代碼來解釋這一點。 – Kaperly

+0

@Kaperly沒問題!我已經添加到我的答案。 – Kyle