우선, XNA는 C #도 사용하므로 동일한 프로그래밍 언어입니다. 기본 API는 DirectX와 약간의 차이가 있지만 점프와는 아무런 관련이 없으므로 동일한 자습서 또는 답변이 여기에 적용되어야합니다. 또한 많은 요소에 따라이를 구현하는 방법이 많이 있습니다. 아래에서 설명 할 것은 가능성 중 하나입니다.
기본 물리학 요구 사항
먼저 업데이트 루프에서 기본적인 물리 변수와 계산이 필요합니다. 특히, 위치, 속도 및 중력이 정의되어 있어야하며 업데이트 루프는 이와 거의 비슷한 작업을 수행해야합니다 (단순화를 위해 충돌 감지 및 응답 생략).
float positionX, positionY; // Position of the character
float velocityX, velocityY; // Velocity of the character
float gravity = 0.5f; // How strong is gravity
void Update(float time)
{
positionX += velocityX * time; // Apply horizontal velocity to X position
positionY += velocityY * time; // Apply vertical velocity to X position
velocityY += gravity * time; // Apply gravity to vertical velocity
}
고정 높이 점프
키를 아무리 길게 누르더라도 항상 같은 높이를 가진 점프를 구현하는 가장 쉬운 방법은 단순히 수직 속도를 한 번 변경하는 것입니다. 그러면 캐릭터가 상승하기 시작하지만 중력은 자동으로 캐릭터를 끌어 내립니다.
void OnJumpKeyPressed()
{
velocityY = -12.0f; // Give a vertical boost to the players velocity to start jump
}
중요 캐릭터가 바닥에 있지 않으면 점프를 시작하고 싶지 않으므로 체크를 추가해야합니다.
가변 높이 점프
그러나 Mario 및 Sonic과 같은 게임에는 가변 높이로 점프 할 수 있는데, 여기서 점프 높이는 버튼을 얼마나 오래 누르고 있는지에 따라 다릅니다. 이 경우 모두 눌러 처리해야 하고 점프 키를 해제. 다음과 같은 것을 추가 할 수 있습니다.
void OnJumpKeyReleased()
{
if(velocityY < -6.0f) // If character is still ascending in the jump
velocityY = -6.0f; // Limit the speed of ascent
}
위의 코드에서 이러한 모든 값 (예 : 0.5
, -12.0f
또는 -6.0f
)을 조정하면 점프 느낌, 점프 높이, 점프 버튼을 놓은 후에도 얼마나 많은 운동량을 유지하는지, 떨어지는 속도 등을 변경할 수 있습니다. .
중요 사항 매 프레임마다이 기능을 호출하지 마십시오. 키를 누르거나 놓을 때 한 번만 호출하십시오. 그렇지 않으면 캐릭터가 점프 대신 날아갑니다.
작업 예
방금 위에서 설명한 기술의 간단한 예를 만들었습니다. 브라우저에서 여기를 시도해 볼 수 있습니다 (마우스 버튼을 눌러 점프, 중간에 놓아 점프 높이를 제어하십시오). JS에 있지만 앞에서 언급 했듯이이 경우 언어는 관련이 없습니다.
http://jsfiddle.net/LyM87/