แพลตฟอร์มและฟิสิกส์
กรณีขอบเหล่านี้มีมากมาย platformers สนุกดีไม่ทำงานในลักษณะที่ถูกต้องทางกายภาพใด ๆ และการควบคุมและพฤติกรรมที่ผู้เล่นคาดหวังหลังจากปีของ "สมบูรณ์แบบ" platformers เช่นมาริโอยากที่จะใช้งานกับเทคนิคทั่วไปเช่นคุณได้รับกับ Box2D หรือเครื่องมือฟิสิกส์อื่น ๆ platformers ที่ดีส่วนใหญ่จะไม่ใช้ฟิสิกส์ทั่วไปหรือการตอบสนองการชนในอุปกรณ์ควบคุมของผู้เล่น
สร้างฮัลล์
เกี่ยวกับคำถามเฉพาะของคุณทางออกที่ดีที่สุดคือหยุดใช้กล่องเป็นพื้น ใช้ชุดของส่วนของเส้นที่เชื่อมต่อ (ฮัลล์) ที่ช่วยให้เอ็นจิ้นการตรวจจับการชนชนโฟกัสไปที่พื้นผิวที่เดินได้จริงเท่านั้นและไม่มองที่ขอบ "ปลอม" ที่มีอยู่ระหว่าง AB และ BC นั่นคือสิ่งที่ Box2D ทำจริงๆแล้ว รูปร่างถูกใช้เพื่อสร้างพื้นผิวภายนอกซึ่งถูกเชื่อมโยงเข้าด้วยกันเพื่อสร้างฮัลล์
คุณต้องการสิ่งนี้แม้ในเกมแบบเรียงต่อกันหรือในสถานการณ์ที่คุณมีวัตถุ AABB สองตัวถัดจากการแสดงอื่น ๆ เอ็นจิ้นการชนจะรับขอบแนวตั้งเหล่านั้นและทำให้ผู้เล่นจับได้ มีแฮ็กที่สามารถช่วยได้ แต่ไม่ใช่กำจัดปัญหา การแก้ปัญหาคือการมีส่วนของเส้นตรงเพียงเส้นเดียวแสดงถึงพื้นผิวแทนที่จะเป็นกล่อง 2D เต็มรูปแบบ
คุณสามารถสร้างเปลือกในกรณีทั่วไปโดยการตัดรูปหลายเหลี่ยมซึ่งกันและกันและเข้าร่วมจุดคลิปลงในรายการขอบ
พื้นผิวลาด
เนื่องจากตัวอย่างของคุณมีความลาดชันและคุณกำลังพูดถึงการชดใช้ความเสียหายและคุณสมบัติทางกายภาพอื่น ๆ ฉันจะชี้ให้เห็นปัญหาอื่น ๆ ที่คุณจะสังเกตเห็นในไม่ช้าซึ่งแสดงให้เห็นว่าทำไมการตรวจจับการชนทั่วไปและการตอบสนอง ก่อนอื่นให้ลองยืนบนแพลตฟอร์มที่มีมุมกระโดดขึ้นแล้วลงจอด คุณอาจสังเกตเห็นว่าตัวละครจะ "เลื่อน" เล็กน้อยเมื่อลงจอด ปัญหาคือว่าผู้ติดต่อปกติที่คุณกำลังสร้างมักจะชี้ให้เห็นจากพื้นผิวที่ทำมุม จากนั้นเมื่อแก้ไขการชนผู้เล่นจะถูกผลักออกไปในทิศทางนั้น แม้ว่าตัวละครจะล้มลงเขาก็จะถูกผลักขึ้นและไปทางขวาเล็กน้อยเมื่อลงจอดทำให้เกิดสไลด์ สิ่งนี้สามารถถูกแฮ็กโดยคำนึงถึงความเร็วสัมพัทธ์
ปัญหาที่สองที่คุณจะสังเกตเห็นซึ่งยากต่อการแก้ไขมากขึ้นคือสิ่งที่เกิดขึ้นเมื่อคุณพยายามวิ่งลงทางลาดอย่างรวดเร็ว ผู้เล่นจะ "กระโดด" ลงทางลาด สิ่งนี้สามารถมองเห็นได้แม้ในเกม AAA ส่วนใหญ่ในปัจจุบัน ไม่เพียง แต่ดูโง่ แต่หากเกมของคุณต้องการให้ผู้เล่นถูกเท้าบนพื้นเพื่อกระโดดมันทำให้ยากที่จะวิ่งเล่นบนทางลาดและกระโดดลงครึ่งหนึ่งเพราะผู้เล่นกำลังติดต่อทางลาดระหว่างส่วนเล็ก ๆ ของ เวลาที่ใช้ไปกับมัน การแก้ไขที่ง่ายกว่าคือการทำ rays บางครั้งเมื่อผู้เล่นเคลื่อนที่และจัดตำแหน่งผู้เล่นลงไปที่พื้นผิวที่ใกล้ที่สุด (ถ้าอยู่ใกล้กับผู้เล่นมากที่สุด) หากผู้เล่นไม่กระโดดและอยู่บนพื้นก่อนหน้านี้
คุณอาจพบว่าผู้เล่นเปิดตัวขึ้นไปในอากาศเมื่อวิ่งขึ้นทางลาดหากคุณพยายามสร้างแบบจำลองความเร็วความเสียดทานและการชดใช้ความเสียหายของผู้เล่นราวกับว่าเขาเป็นร่างกายที่แข็งปกติ การเคลื่อนไหวของผู้เล่นควรถูก จำกัด การเคลื่อนไหวในแนวนอนยกเว้นการล้ม / กระโดด แน่นอนถ้าคุณเล่น platformer ยุคทองเก่าคุณอาจสังเกตเห็นว่าความเร็วแนวนอนของผู้เล่นมักจะคงที่ระหว่างพื้นผิวแนวนอนและแนวลาดชัน สิ่งนี้จะต้องนำมาพิจารณาเมื่อเดินขึ้น / ลงเช่นกัน
จะมีอีกหลายกรณีมุมแปลก ๆ ที่คุณจะพบในที่สุดเช่นกัน หากคุณกำลังพยายามสร้าง platformer ที่ดีมันเป็นการดีที่สุดที่จะใช้คอนโทรลเลอร์ของ platformer player แยกต่างหากจากฟิสิกส์และ hardcode การเคลื่อนไหวและพฤติกรรมการควบคุมที่คุณต้องการแทนที่จะใช้ฟิสิกส์ทั่วไปและอัลกอริธึมการตอบสนองการชนกัน