การใช้“ การกระโดดสองครั้งอย่างถูกต้อง”


23

ฉันกำลังเล่นเกม 2D บน iPhone โดยใช้ Corona (เวอร์ชั่นทดลองดังนั้นฉันไม่สามารถใช้ฟอรัมของพวกเขาได้) เกมดังกล่าวเกี่ยวข้องกับตัวละครที่ตกลงมาบนท้องฟ้าและฉันพยายามที่จะใช้ "การกระโดดสองครั้ง" สำหรับตัวละครเพื่อให้เขาสามารถกระโดดขึ้นได้ในขณะที่ตกลงมา ฉันใช้ห้องสมุดฟิสิกส์ของ Corona เพื่อให้ตัวละครตกและวิธีที่ดีที่สุดในการกระโดดให้เขาคือการใช้วิธีการกระตุ้นตามแนวตั้ง

object:applyLinearImpulse(0, -0.4, object.x, object.y)

ปัญหาที่ฉันเผชิญคือเมื่อตัวละครเพิ่งเริ่มต้น (ความเร็วแนวตั้งต่ำ) เขากระโดดสูงมากและเมื่อเขาตกลงมาพักหนึ่ง (ความเร็วแนวตั้งสูง) การกระโดดนั้นเล็กน้อย ฉันเดาว่าทางออกที่ดีที่สุดคือใช้สมการบางอย่างกับความเร็วเป็นอินพุตเพื่อให้กระโดดเหมือนกันโดยไม่คำนึงถึงความเร็ว แต่ฉันไม่สามารถหาได้ว่าสมการนั้นจะเป็นอะไร

โอเคนั่นคือความคิดทั้งหมดของฉัน คำถามสุดท้ายก็คือคุณใช้การกระโดดสองครั้งกับฟิสิกส์ได้อย่างไร มีสมการที่เหมาะสมสำหรับปัญหาของฉันหรือไม่ ฉันควรใช้แนวทางอื่นหรือไม่? มันเคยทำมาก่อนในเกมเช่น Smash Bros ดังนั้นจึงมีวิธีแก้ปัญหาที่ทำซ้ำได้ใช่ไหม?

คำตอบ:


37

เพียงแค่ตั้งค่าความเร็วแนวตั้งเป็นศูนย์และเรียกรหัสเดียวกันกับที่คุณใช้ในการกระโดดครั้งแรก


4
โอ้ นั่น ... ใช้งานได้ดีจริง ๆ และง่ายมากที่ตอนนี้ฉันรู้สึกโง่ที่ไม่ได้คิดถึงมัน โอ้ดี ขอบคุณ!
เจสซี่ J

5
บ่อยครั้งที่การล่อลวงทำให้สิ่งต่าง ๆ มีความซับซ้อนเกินกว่าที่พวกเขาจะต้องเป็น :)
Adam Harte

2
คำตอบที่สง่างาม!
lathomas64

1

ฉันไม่แน่ใจ แต่ฉันคิดว่าเกมอย่าง UT2K4 อาจใช้ตรรกะเช่นนี้:
ถ้า (เพิ่มขึ้นแล้ว &&!! สองเท่าที่เพิ่มขึ้นแล้ว &&! การสัมผัสพื้นดิน && velocity.up อยู่ที่ประมาณ 0.0f) DoDoubleJump ();

องค์ประกอบ y หรือ z ของคุณขึ้นอยู่ที่ใด (ขึ้นอยู่กับองค์ประกอบใดที่ขึ้นอยู่)
ซึ่งหมายความว่าผู้เล่นของคุณสามารถกระโดดได้สองครั้งเมื่อพวกเขาอยู่ที่ความสูงสูงสุดของการกระโดดครั้งแรกและกำลังจะเริ่มลงมาอีกครั้ง
ฉันชอบวิธีนี้เพราะมันสร้างความชำนาญเล็กน้อย (คุณต้องใช้เวลาให้เกิดขึ้นภายใน "velocity.up คือประมาณ 0.0f")
ขึ้นอยู่กับสิ่งที่คุณต้องการคุณสามารถตั้งค่า "บวก 0.0f" เพื่อบวกจำนวนเพื่อให้พวกเขาสามารถกระโดดสองเท่าเมื่อยังคงเลื่อนขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.