2010-06-22 60 views
1

所以我一直試圖在Box2D中重新創建Pong以學習如何使用引擎,我認爲在其中創建pong比我想象的要複雜。 我有碰撞自己下來,我有球恢復設置爲1.0,我唯一的問題是我不知道如何讓球擊中槳,以正確的角度反彈,並有足夠的速度達到另一側。我只是想讓它看起來像一個自然的乒乓球遊戲。 我看過C++,actionscript,但似乎沒有人真的完全實現了pong遊戲。Pong in Box2D XNA

我只需要實現我自己的物理?

回答

6

基本上,對於一個真實的Pong感覺,你需要實現你自己的物理。經典遊戲通常以簡單的2D速度和位置(和也許加速度)實現物理,然後僞造其他所有東西。

(這是值得注意的是,即使是現代遊戲假貨多,因爲他們可以逃脫。這是不值得實現的東西硬的方式,如果你能做到這一點最簡單的方式,並仍然得到同樣的遊戲感覺。)

Pong的「僞造」物理應該相當簡單。下面是簡單的物理爲你一個非常基本的,不一定是完整位:

Vector2 position; 
Vector2 velocity; 
protected override void Update(GameTime gameTime) 
{ 
    position += velocity * (float)gameTime.ElapsedGameTime.TotalSeconds; 

    if((IsInsideLeftBat(position) && velocity.X <= 0) 
      || IsInsideRightBat(position) && velocity.X >= 0) 
    { 
     velocity.X = -velocity.X; // Bounce the other way 
     // To change things up, maybe you can change velocity.Y too. 
    } 

    // And of course handle the ball going out of the play field, scoring, etc... 
} 

現在,假設你真的需要爲你的遊戲真實的物理。與真實物理的乒乓遊戲可能很有趣(in fact somebody has already done it, even real-er)。

我說的「僞造它」的事情仍然適用。遊戲中的物理學通常更多地是通過調整事物來獲得感覺比現實主義更合適的東西。也許你需要將你的彈跳係數提高到1.1,並且可能會增加一些線性阻力,所以它不會失去控制?

(或者,如果你遇到了麻煩讓球給對方,儘量減少線性阻力。)

其實更重要的是可能在遊戲中的「主角」 - 你想保留它在物理模擬中,所以它可以與物體相互作用(也許你的遊戲場地充滿了障礙物 - 這可能很有趣) - 但是你希望完成對其運動的控制。

要做到這一點,只需在您的物理引擎更新運行後,進入並更改您不喜歡的任何值!在Pong的情況下,這可能很簡單,就像重置球的速度,以便每幀以恆定的速度移動。我想你已經在爲這些槳做着這樣的事情 - 在每一幀中設置它們的位置。

(我用這種方法時,我做了一個platformer on a physics engine

另一種替代的方式來假的東西可能是一個衝突處理方法添加到您設定是多麼喜歡它的球的速度槳。

0

我的other answer在使用物理引擎製作遊戲時仍然適用。但我也意識到你說:

我把球恢復到1。0

您是否還將槳回覆設置爲1.0?我沒有檢查Box2D的,但在先知(我手頭上有和這與Box2D的)作爲平均(從Arbiter.cs)計算的碰撞響應使用的restituion力:

_restitution = (GeometryA.RestitutionCoefficient 
       + GeometryB.RestitutionCoefficient) * .5f; 

如果Box2D的工作原理與 相同, 不是(感謝Mark的評論),你的paddles也需要恢復到1.0來獲得你想要的效果。

(另:這顯示它如何幫助的源代碼,以手頭的物理引擎。)

+1

在Box2D中,賠償是兩個係數的最大值(默認情況下)。 – mpen 2010-06-23 02:39:03