Wall Jump สำหรับ 2D Platformer


14

ฉันกำลังมองหาวิธีที่จะใช้กระโดดผนังในเกม xna ของฉัน แต่ฉันไม่สามารถหาข้อมูลใด ๆ เกี่ยวกับมันได้ใครบางคนสามารถใครบางคนได้โปรดช่วยฉันออกมา?

คำตอบ:


21

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


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

@ CiscoPhone: ใช่ขอบคุณ นั่นจะทำให้เกิดการเปลี่ยนแปลงพฤติกรรมอย่างแปลก ๆ ระหว่าง 100 ms หลังจากการชนและภายหลัง
โกลาหล

2

ฉันจะทำการตรวจสอบคะแนนโดยสุจริต ดังนั้น:

if (falling AND left_key_pressed AND !point_free(x-1,y))
    doWallJump

คุณอาจต้องการเปลี่ยน y เพื่อพูด y + sprite_width / 2 (หรือ - ขึ้นอยู่กับระบบพิกัดของคุณ) เพื่อให้มันตรวจสอบทางด้านซ้ายของกึ่งกลางผีสางของคุณแทนด้านบน (หรือด้านล่าง) นี่คือวิธีที่ยังไม่มีการดำเนินการตรวจสอบผนังสำหรับการกระโดดกำแพง (ย่อหน้าสุดท้าย)

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

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

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