2009-02-26 13 views
5

나는 차를 가지고 있고 가속 할 때 나는 "천천히"increse하는 속도를 원한다. ..XNA MathHelper.SmoothStep? 어떻게 작동합니까?

내가 약간의 사이트를보고 난 후에 SmoothStep 방법이 그것을하기 위해 사용될 수 있었다고 결론 지었다?

저는 텍스처와 물건을 어떻게 움직이는 지 잘 알고 있습니다. 그래서 smoothstep이 float 같은 값을 증가시키는 데 사용되는 예제는 매우 유용 할 것입니다!

: 사전에

덕분에 나는 거기 슬픈 생각 밤은은 MSDN 라이브러리의 모든 방법에 대한 예. 당신이 사이 이동하려는 두 개의 값 및 그래서 당신은에서 선형 적으로 증가하는 float F가 있다고
0과 1 아마 할 필요가 그들 사이의 양 -가 SmoothStep처럼 보이는 this documentation에서

답변

12

SmoothStep이 도움이되지 않습니다. SmoothStep은 두 값 보간 함수입니다. 그것은 sinus 보간법과 비슷한 것을합니다. 그것은 천천히 약 x = 0.5에서 급격한 속도로 가속 한 다음 도착 (x = 1.0)으로 천천히 가속합니다. 다음과 같은

: 이것은 대략적인

smoothstep_approx

, 실제 기능이 정확한 수치가 없습니다.

예 x = 0..0.5를 사용하여 원하는 효과를 얻을 수 있지만 가속 곡선을 거의 제어 할 수는 없습니다.

자동차 또는 다른 물건을 실제로 가속 시키려면 가장 좋은 방법은 스스로 가속 및 속도를 추적하는 것입니다.

class Car : GameComponent 
{ 
    public override void Update(GameTime time) 
    { 
     velocity += acceleration * time.ElapsedGameTime.TotalSeconds; 
     position += velocity * time.ElapsedGameTime.TotalSeconds; 
    } 

    Vector3 position; 
    Vector3 velocity; 
    Vector3 acceleration; 
} 

위치, 속도 및 가속도는 게임 상태가 사용하는 몇 차원에 따라 Vector2 또는 Vector3를 제공합니다. 또한이 통합 양식은 약간의 수학 오류가 발생하기 쉽습니다.

5

3 개 인수를 0을 일정 시간 동안 대상 속도로 설정합니다. SmoothStep을 사용하면 속도를 직접 사용하지 않고 다음과 같이 나타납니다.

float speed = MathHelper.SmoothStep(0, destSpeed, f/destSpeed); 

이 문서의 심각도는 정말 놀랍습니다.

0

그 동안 발견 된 매우 유용한 사이트입니다. http://johnnygizmo.blogspot.com/2008/10/xna-series-basic-ai.html

+0

실제 숫자로 이산 숫자를 삽입해야 할 때 키 포인트가 0이되도록해야합니다. 정확한 순간에 차를 천천히 시작하고 천천히 멈추고 싶다면 SmootStep이 도움이 될 것입니다. – Coincoin

+0

또한 메뉴와 같은 모든 종류의 애니메이션 전환에 매우 유용 할 수 있습니다. – Coincoin

+0

예가 있으면 게시 해주세요. :) – Moulde