2010-06-22 4 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의 체크하지만,하지 (Arbiter.cs에서) 평균으로 계산 충돌 응답에 사용되는 restituion 힘 (내가 Box2D의 관계가 손에 가지고 무엇을) 파 시어의 :

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

하는 경우를 Box2D는 과 같은 방식으로 작동합니다. (의견 표시겠습니까)이 아니므로 원하는 효과를 얻으려면 패들도 1.0으로 설정해야합니다.

은 (또한 :이은에 직접 당신의 물리 엔진에 소스 코드를 가지고하는 데 도움이 방법을 보여줍니다.) Box2D의에서

+1

이, 손해 배상은 (기본적으로) 두 계수의 최대이다. – mpen