ก่อนอื่น 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
}
tweaking ทั้งหมดของค่าเหล่านี้ (เช่นตัวเลขเช่น0.5
, -12.0f
หรือ-6.0f
) ในโค้ดข้างต้นคุณสามารถเปลี่ยนความรู้สึกของการกระโดดของคุณวิธีการที่สูงเขากระโดดวิธีโมเมนตัมมากเขาไม่ให้แม้หลังจากที่ปล่อยปุ่มกระโดดวิธีการที่รวดเร็วเขาตกอยู่ ฯลฯ .
สิ่งสำคัญอย่าเรียกใช้ฟังก์ชันเหล่านี้ทุกเฟรม เรียกพวกเขาเพียงครั้งเดียวเมื่อกดหรือปล่อยกุญแจ มิฉะนั้นตัวละครของคุณจะบินแทนการกระโดด
ตัวอย่างการทำงาน
ฉันเพิ่งสร้างตัวอย่างเทคนิคย่อที่อธิบายไว้ข้างต้นซึ่งคุณสามารถลองใช้บนเบราว์เซอร์ของคุณได้ที่นี่ (กดปุ่มเมาส์เพื่อกระโดดปล่อยกลางคันเพื่อควบคุมความสูงของการกระโดด) มันอยู่ใน JS แต่อย่างที่ฉันพูดไปก่อนหน้านี้ภาษาไม่เกี่ยวข้องในกรณีนี้
http://jsfiddle.net/LyM87/