2011-10-08 123 views
2

嘿傢伙即時製作一個槳球/乒乓球比賽,我想弄清楚如何讓球像其他乒乓球一樣隨機離開槳板。C#XNA槳球遊戲

最簡單的方法是什麼?

目前我的碰撞的代碼只是使得它在其他方向(上)

public void checkCollision() 
{ 
    Rectangle paddlerect = new Rectangle((int)Paddle.pos.X, (int)Paddle.pos.Y, Paddle.paddle.Width, Paddle.paddle.Height); 
    Rectangle ballrect = new Rectangle((int)pos.X, (int)pos.Y, ball.Width, ball.Height); 

    if (ballrect.Intersects(paddlerect)) 
    { 
     yspeed = 3; 
    } 
} 

你能告訴我如何使它randomy的反彈向兩側反彈的?就像一個diaganol。

+1

不知道其餘的代碼,這只是一個猜測,但如果你有一個yspeed變量,決定你的垂直速度和方向。難道你沒有可以用同樣的方式改變的xspeed? – Mikael

+0

我從來沒有見過乒乓球比賽中,「球」隨機反彈「通常在乒乓球遊戲中,Y軸上的球方向只是在擊球時恢復。如果(ballrect。相交(paddlerect)) { yspeed = -yspeed; } – Olle89

回答

0

我假設你有一個名爲xspeed的變量,它控制球向左或向右移動的速度。

pong類型遊戲有兩個主要的東西。

  1. 只是反轉y速度,就像你正在做的(實際上)。
  2. 反轉y的速度,但也取決於'擊球'擊球的位置改變x的速度。即在最右側擊球會使其反彈。

對於選項2,您可以A)根據距離球擊中的距離,直接設置xspeed,或者B)您可以根據距離球中點有多遠添加/減去xspeed。

var relativemidpoint = (ball.left + ball.width/2) - 
         (paddle.left + paddle.width/2); 

// Option A 
xspeed = relativemidpoint/10; // or some other constant 
// Option B 
xspeed += relativemidpoint/10; // or some other constant 

您可能還想限制xspeed在一個範圍內,以免它橫向過快。

如果您希望整體速度保持不變,則您必須根據xspeed的值縮放yspeed

1

我要去假設球至少有4個變量:

  • 角度
  • 幅度
  • XSpeed
  • YSpeed

角度+震級形成Vector ,我會打電話給v1。 爲了使它在「隨機」方向上反彈(實際上這絕對不是隨機的),您需要使用竇和餘弦函數。我不會回頭解釋三角形中的東西是如何工作的,但是你可以用它們來計算其中的每一個長度和角度。所以你有:

XSpeed = v1.Magnitude * cos(v1.Angle); 
YSpeed = v1.Magnitude * sin(v1.Angle); 

如果你需要了解更多,請登錄到Game Programming Wiki。說真的,這真的很棒。

+0

+1鏈接:) – BlackBear