2011-10-08 9 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 변수가있는 경우입니다. 같은 방식으로 변경할 수있는 x 스피드가 없습니까? – Mikael

+0

나는 탁구 게임을 본 적이 없다. 보통 "탁구 공"이 탁구 공에서 "무작위로"튀어 나와 Y 축의 공 방향이 외륜을 치고 복귀한다. if (ballrect.교차 (paddlerect)) { yspeed = -yspeed; } – Olle89

답변

0

공이 왼쪽이나 오른쪽으로 얼마나 빨리 이동하는지 제어하는 ​​변수가 xspeed이라고 가정합니다.

퐁 게임이하는 두 가지 주요 사항이 있습니다.

  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의 비율을 조정해야합니다.

  • 각도
  • 이 이

각도 +의 크기가 Vector을 형성을 YSpeed ​​XSpeed ​​진도 : 나는 볼이 적어도 4 개 변수가 있다고 가정하겠습니다

1

, 나는 v1이라고 부를 것이다. "무작위"방향 (사실 무작위 적이는 것은 아닙니다)에서 바운스되게하려면 sinus 함수와 cosinus 함수를 사용해야합니다. 저는 물건이 삼각형에서 어떻게 작동 하는지를 설명하기 위해 돌아 가지 않을 것입니다, 그러나 당신은 그것을 사용하여 그것의 모든 길이와 각도를 계산할 수 있습니다. 그래서, 당신은 :

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

당신이 Game Programming Wiki에게, 머리를 더 배울 필요합니다. 진지하게, 그것은 정말로 멋지다.

+0

+1 링크 : – BlackBear