ฉันจะจัดการกับแพลตฟอร์มการย้ายในเกมแพลตฟอร์มได้อย่างไร


15

ฉันไม่ต้องการใช้ box2d หรืออะไรเลยฉันแค่ต้องการแพลตฟอร์มเคลื่อนที่ที่เรียบง่าย (ขึ้น - ลง, ซ้าย - ขวา, ทางขวางและทางวงกลม) คำถามของฉันคือจัดการลำดับการอัปเดต / ลำดับชั้นควบคุมเพื่อให้ผู้เล่นยังคงจับจ้องไปที่แพลตฟอร์มอย่างมั่นคงโดยไม่ต้องกระดอนหรือโยกเยก?

คำตอบ:


16

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

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

เรื่องแบบนี้จะเกิดขึ้นทุกโหนดควรมี (x, y) ตำแหน่งเทียบกับโหนดแม่ ตัวอย่างเช่นตัวละครของคุณอาจอยู่ที่ (1,0) ซึ่งสัมพันธ์กับแพลตฟอร์มซึ่งอาจอยู่ที่ (10,10) เทียบกับแผนที่เกม ด้วยวิธีนี้หากแพลตฟอร์มเคลื่อนไหวตัวละครของคุณจะเคลื่อนไหวไปโดยปริยาย

ในแผนผังลำดับชั้นนี้ตำแหน่งของทุกโหนดจะเท่ากับผลรวมของตำแหน่งของเขาบวกกับแต่ละตำแหน่งของโหนดหลัก สมมติว่าเราต้องการรับตำแหน่งของตัวละครบนแผนที่ เราคำนวณ:

(ตำแหน่งของตัวละคร) + (ตำแหน่งของพาเรนต์โหนด) + (ตำแหน่งรูทโหนด) = (1,0) + (10,10) + (0,0) = (11,0)

ตกลงดังนั้นตลอดเวลาที่ตัวละครของคุณยืนอยู่บนแพลตฟอร์ม แล้วการกระโดดล่ะ ตอนนี้เขากระโดดคุณแยกเขาออกจากแพลตฟอร์มและแนบเขาไปยังโหนดที่มีแพลตฟอร์มนั้น ในกรณีนี้แผนที่ (โหนดรูท)

เมื่อเขาลงจอดอีกครั้งให้เขาติดกับสิ่งใดก็ตามที่เขาตกลงมา


1
ฉันจะใช้ความเร็ว x และ y จากโหนดเพื่อส่งผลกระทบต่อผู้เล่น ตัวอย่างที่ 1: แพลตฟอร์มเคลื่อนที่ได้เร็วและหยุดอย่างรวดเร็วผู้เล่นมีแรงขึ้นและเปิดตัว ตัวอย่างที่ 2: แพลตฟอร์มเคลื่อนลงช้ากว่าผู้เล่นที่ตกลงด้วยความเร็วถึงตายเล็กน้อย แพลตฟอร์มควรจะปลอดภัยไปยังดินแดนบนแทนSPLUT
AttackingHobo

นั่นเป็นวิธีการที่น่าสนใจ แต่ดูเหมือนจะเป็นการเปลี่ยนเครื่องยนต์ของฉันอย่างเต็มที่เพื่อให้สามารถเคลื่อนย้ายพลาทorm บางทีถ้าฉันสร้าง objectOnPlatform เป็นส่วนประกอบที่ฉันสามารถทำได้กับวัตถุใด ๆ ที่เพิ่งให้ผลนี้ชั่วคราว
Iain

10

ฉันขอแนะนำให้รักษาสิ่งนี้เป็นปัญหาหลอกทางฟิสิกส์และแก้ปัญหาโดยใช้แรงเสียดทานพื้นดิน

คุณกำลังใช้แรงโน้มถ่วงเพื่อยึดอักขระไว้กับพื้นสิ่งนี้จัดการสถานการณ์ที่แพลตฟอร์มเลื่อนขึ้นและลง เพื่อจัดการกับการเคลื่อนไหวทางซ้ายและขวาพื้นดินควรใช้แรงเสียดทานกับตัวละครอย่างมาก โดยทั่วไประดับแรงเสียดทานนี้จะเป็น 1.0 หรือ 100%

ถ้าตัวละครยังคงนิ่งอยู่ความเร็วของพวกมันจะเป็น 0 และพวกมันจะได้รับความเร็ว 100% จากความเร็วของแท่นเพราะแรงเสียดทาน สิ่งต่อไปนี้:

character_velocity = friction * platform_velocity

ประโยชน์ของวิธีการนี้คือการให้ยืมตัวเองไปยังกลไกการทำ platforming เพิ่มเติมเช่นสามารถเอาชนะแรงเสียดทานบนทางลาดชันทำให้ตัวละครของคุณเลื่อนได้ นอกจากนี้ยังช่วยให้คุณลดแรงเสียดทานเพื่อสร้างน้ำแข็งที่ตัวละครจะเลื่อนไปมาได้อย่างง่ายดาย

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


0

คุณอาจแก้ไขตำแหน่งผู้เล่นไม่ใช่ "สัมบูรณ์ในระดับ" แต่ "สัมพันธ์กับแพลตฟอร์ม" จากนั้นมีฟังก์ชันที่ให้ตำแหน่งจริงของเขา ฉันไม่ชอบสิ่งนี้

มันน่าจะดีกว่า (และง่ายกว่า) ในการผูกเครื่องเล่นไว้กับแพลตฟอร์มเพื่อที่ว่าเมื่อแพลตฟอร์มเคลื่อนที่ + x / + y ผู้เล่นจะเคลื่อนไหวได้มาก

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