Trước hết, XNA cũng sử dụng C # để nó cùng ngôn ngữ lập trình. Và mặc dù API cơ bản có thể có một số khác biệt so với DirectX, nhưng điều đó không liên quan gì đến việc nhảy, do đó, các hướng dẫn hoặc câu trả lời tương tự nên được áp dụng ở đây. Ngoài ra, có rất nhiều cách để thực hiện điều này, tùy thuộc vào rất nhiều yếu tố. Những gì tôi sẽ mô tả dưới đây chỉ là một trong những khả năng.
Yêu cầu vật lý cơ bản
Trước tiên, bạn cần một số biến và tính toán vật lý cơ bản trên vòng cập nhật của bạn. Cụ thể, bạn cần xác định vị trí, vận tốc và trọng lực và vòng cập nhật của bạn sẽ thực hiện một cái gì đó gần giống với điều này (phát hiện va chạm và phản ứng bị bỏ qua cho đơn giản):
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
}
Cố định chiều cao nhảy
Bây giờ cách dễ nhất để thực hiện một cú nhảy luôn có cùng chiều cao, cho dù bạn nhấn phím bao lâu, chỉ đơn giản là thay đổi vận tốc dọc một lần. Điều này sẽ làm cho nhân vật bắt đầu tăng lên, trong khi trọng lực sẽ tự động chăm sóc để đưa anh ta xuống:
void OnJumpKeyPressed()
{
velocityY = -12.0f; // Give a vertical boost to the players velocity to start jump
}
Quan trọng Bạn không muốn có thể bắt đầu nhảy nếu nhân vật của bạn không ở trên mặt đất, vì vậy bạn sẽ cần thêm một kiểm tra cho điều đó.
Biến chiều cao nhảy
Nhưng các trò chơi như Mario và Sonic có bước nhảy thay đổi trong đó độ cao của bước nhảy phụ thuộc vào thời gian bạn nhấn nút xuống. Trong trường hợp này, bạn sẽ cần xử lý cả việc nhấn và nhả phím nhảy. Bạn có thể thêm một cái gì đó như:
void OnJumpKeyReleased()
{
if(velocityY < -6.0f) // If character is still ascending in the jump
velocityY = -6.0f; // Limit the speed of ascent
}
Tinh chỉnh tất cả các giá trị này (tức là các số như 0.5
, -12.0f
hoặc -6.0f
) trong mã ở trên, bạn có thể thay đổi cảm giác về bước nhảy của mình, anh ấy nhảy cao như thế nào, anh ấy giữ được bao nhiêu ngay cả khi thả nút nhảy, anh ấy rơi nhanh như thế nào, v.v. .
Quan trọng Đừng gọi các chức năng này mỗi khung. Gọi cho họ chỉ một lần khi phím được nhấn hoặc phát hành. Nếu không thì nhân vật của bạn sẽ bay thay vì nhảy.
Ví dụ làm việc
Tôi vừa tạo một ví dụ nhanh về các kỹ thuật được mô tả ở trên, bạn có thể thử trên trình duyệt của mình ở đây (nhấn nút chuột để nhảy, thả nó giữa chừng để kiểm soát độ cao của bước nhảy). Đó là trong JS nhưng như tôi đã đề cập trước đó, ngôn ngữ này không liên quan trong trường hợp này.
http://jsfiddle.net/LyM87/