2012-02-23 81 views
2

我目前正在試圖用XNA製作一個基本的平臺遊戲,我想知道如何創建一個「跳躍效果」。我目前有基本的鍵盤輸入允許橫向移動,但我希望我的精靈緩慢進入跳躍,而不是立即傳送到那裏(現在我每次跳躍時都有類似Rectangle.Y + = 40的東西,使得精靈即刻出現在那裏)。有沒有人有任何見解?遊戲中的跳躍效果

+0

您可以爲運動添加第二個矢量(除了位置)。然後,在每次更新時,將運動矢量添加到位置矢量。在跳轉時,設置運動矢量以緩慢移動播放器。在跳躍的最高點,改變它以將球員向下移動。跳轉後,設置爲零。需要注意的是,如果有幾件事會影響運動矢量的話(添加它,而不是將它設置爲不覆蓋現有運動) – yoozer8 2012-02-23 02:38:43

回答

0

我並不完全知道如何在XNA/C#中實現這一點,但是在我製作的Flash遊戲中,我只是添加了垂直速度屬性。我會盡我所能寫所有的東西作爲C#..

例子;創建速度屬性:

​​

垂直速度應該不斷降低(通過重力)。建立一個重力屬性從您的播放器的地方進行訪問:

float Gravity = 2.5; 

而在你的球員update()方法,通過Gravity遞增verticalVelocity。同時增加玩家的Y位置verticalVelocity。這將模擬下降:

verticalVelocity += Gravity; 
Position.Y += verticalVelocity; // this may be -= in XNA, not sure where the y axis beings 

當你打一個面,速度應該重置爲0

最後,跳,簡單地從verticalVelocity減去給定值:

public void Jump(float height) 
{ 
    // Only jump if standing on a surface. 
    if(verticalVelocity == 0) 
     verticalVelocity -= height; 
} 
+0

爲了可擴展性,您應該創建一個'PhysicsSimulation'(或類似的)類並讓它包含'List '其中Body是一個基類,玩家和任何其他應該受到影響的對象都繼承自基類。然後你可以更新'PhysicsSimulation'並且它可以處理所有物體的重力。這可以讓你的遊戲玩法更加豐富,沒有太多困難。 – annonymously 2012-02-23 07:48:35

+0

@匿名這是一個OP的建議,而不是我自己? – Marty 2012-02-23 08:46:07

+0

兩者,我想:) – annonymously 2012-02-23 09:44:11

0

你最終會想要在你的遊戲中加入重力和其他力量,所以我強烈建議你爲自己節省很多痛苦並實現某種基本的力量系統。這可以使用Vector2來完成,因爲您可以將它們添加到角色的速度。然後對你的角色施加一個瞬間的力量來推動它。

如果你真的不想使用物理引擎,你可以做一個Vector2與高點跳躍的Y和人物X的,然後使用Vector2.Lerp方法的字符位置之間進行插值跳躍的終點。

這通常是一個非常糟糕的系統使用,我強烈建議您使用現有的物理引擎,或使自己的一個簡單的。

0

使用一個sinusoid

代碼應該看起來像這樣:

float ground = 0.0f; 
float angle = 330.0f; 

jump(){ 
if(ground == 0.0f)ground = Rectangle.Y; 
    if(Rectangle.Y <= ground) 
    { 
    Rectangle.Y+=Math.Sin(angle/(Math.Pi*180)); 
    angle++; 
    } 
} 
+0

如果你把這個代碼放在Update方法中,它將不起作用。你的邏輯有點偏離,角色會以不同的速度向上移動。我想你真正想要做的是:'Rectangle.Y =(int)(ground + Math.Sin(angle /(Math.PI * 180)));' – annonymously 2012-02-23 09:54:15

+0

那就是爲什麼我用'+ ='而不是' =' – user1097489 2012-02-23 14:01:13

+0

使用'+ ='將右邊的操作數添加到左邊,然而我們在這裏添加*'ground' *到'Sin'值,然後把它分配給'Rectangle'。 – annonymously 2012-02-23 20:30:51

0

您可以準確地創建一個重力作用,如果你動態修改ySpeed,而不是僅僅增加40

你要聲明一個ySpeed

ySpeed = 0; 

然後你要使用的加速度變量

acceleration = 0.25; 

好的,現在我們已經做到了,讓我們增加引力,只要我們的玩家沒有碰到地板。

if(playerLocationY + playerHeight > floorLocationY) 
{ 
    gravity = false; 
} 
else 
{ 
    gravity = true; 
} 

if(gravity) 
{ 
    ySpeed += acceleration; 
} 

既然我們已經搞清楚了,我們想要包括一些讓我們跳躍的東西。

if(KeyPressed == UP) 
{ 
    ySpeed -= acceleration; 
} 

這將在向上的方向

現在,我們要確保我們實際上動動我們的球員,所以讓我們添加一個最後一行,我們就大功告成了。

playerLocationY += ySpeed; 

恭喜你,你做到了。