2015-06-21 34 views
1

我目前正在用Java製作2D平臺變形器。我是初學者,所以放鬆一下。 我在遊戲中遇到重力問題。我正在使用不同的變量來下降和跳躍。我正在使用平鋪地圖。所以讓我們明白。 我跌倒的方法是這樣的 -Java 2D平臺變形器重力

if(collisionDown == false) { 
    characterY += fall; 
    fall ++; 
{ 

秋天等於4。如果collisionDown是真的它重置回4

我的跳法幾乎是一樣的:

if(key.E == true && collisionDown == true) { 
    characterY -= jump; 
    jump --; 
} 

跳轉等於16.如果collisonDown爲真,它將重置爲16.

現在的問題是:想象角色正在跳躍。它在空中,而在下降的時候特性+ =下降;可以說characterY = 250,在這個時刻下降等於15。字符下面的下一個實體圖塊從Y位置255開始。字符位於250,並且不檢測碰撞,因此下一幀會將15添加到characterY,即250 + 15 = 265。此時,角色已經「進入」實體圖塊這是在位置Y255.

我有「固定」,讓角色回到固體瓷磚的頂部(這是可見的和煩人的)。這不是一個完美的解決方案,因爲它會減慢字符每幀1幀時間它進入一個堅實的瓷磚(這是因爲它檢測到左右碰撞和角色不能移動)。如果我可以這樣說,這個角色明顯地口吃。

我需要一個解決方案,但不能想到任何問題。 所以,如果你提出一個建議,我會很高興。謝謝。

回答

0

我可能會使用類似以下內容。

if(collisionDown == false) { 
    characterYnext = characterY + fall;   //Get Next Position 
    if(NextMovementCollides()){     //Basically if next position is too far. 
    characterYnext += difference_between(CharacterY,Ground);  //This should move the character to the ground state. 
    fall = 0;             //No longer falling so reset the value. 
    } 
    else{characterY += fall; fall++;}  //Otherwise continue falling like normal. 
} 

免責聲明:我不是一個java程序員,所以我的語法可能有點偏離。

這應該可以工作,只需將您的遊戲邏輯插入到合適的位置即可。

+0

簡單而有效。謝謝 –

0

我通常處理這個問題的方法,是預先檢查運動:

private int moveDown(int fall){ 
     if (isSolidBlock(characterX, characterY + fall)){ 
      //Knowing the height of your block, calculate some kind of reduction. If your block height is 40, it's probably something like (characterY + fall)%40 
      fall = 4; 
      collisionDown = true; 
      return maxFallUntilSolidBlockReached(); 
     } 
     fall++; 
     return fall; 
    } 

private boolean isSolidBlock(int x, int y){ 
     //Implement some kind of check if at (x,y) there's a solid block. 
    } 

然後就做這個秋季的計算:

if(collisionDown == false) { 
      characterY += moveDown(fall); 
     } 
+0

嗯。這似乎是一個合理的想法,但我真的不明白 返回maxFallUntilSolidBlockReached(); –

+0

如果您正在使用網格,並且所有塊的高度均爲靜態寬度,則知道下面的塊的y座標。假設你的塊的高度爲20像素,characterY + fall = 122。你可以從122中減去20,直到你的數字小於20,或者簡單地使用122 mod 20.結果爲2,這意味着你也會下降2個像素深。要解決這個問題,只需將字符Y +降低2並將其用作更新!這假設你使用了一個網格。如果情況並非如此,還有其他選擇,但是我需要看到你的地圖實現能夠真正幫助你,然後=) –

+0

感謝您的幫助:D,但是一個傢伙建議了一個更簡單的解決方案。無論如何感謝 –