ทำให้ตัวละครเคลื่อนไปตามทางลาดโค้งในโลกด้วยแรงโน้มถ่วง


10

ฉันเคยเห็นเกมนี้

กางเกงแฟนซี 2 . และสิ่งที่ฉันสังเกตเห็นนอกเหนือจากฟิสิกส์และแอนิเมชั่นที่สวยงามก็คือตัวละครนั้นเคลื่อนไหวไปตามทางลาดชันหรือแม้แต่ทางลาดโค้ง ฉันมีประสบการณ์น้อยใน Box2d แต่แนวคิดของความลาดชันโค้งนี้เป็นเรื่องใหม่สำหรับฉัน มันจะเป็นความช่วยเหลือที่ดีสำหรับฉันถ้ามีคนรู้แจ้งฉันเกี่ยวกับแนวคิดนี้และการดำเนินการของมัน แม้ว่าการใช้งานไม่ได้อยู่ใน box2d ก็ยินดีต้อนรับ


2
Metanet คนที่ทำ N (ซึ่งอยู่ใน Flash) มีการสอนวิธีการชนที่ครอบคลุมวิธีคำนวณเส้นโค้ง: metanetsoftware.com/technique/tutorialA.html
CodexArcanum

คำตอบ:


5

คุณจะได้เส้นโค้งใน Box2D ได้อย่างไร

ในBox2D เวอร์ชันที่ยังไม่เผยแพร่มีสองประเภทรูปร่างใหม่คือb2LoopShapeและb2EdgeShapeซึ่งช่วยให้คุณสร้างเส้นโค้งจากลำดับของส่วนของเส้น

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

ตัวละครจะโค้งลงได้อย่างไร?

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


ฉันเห็นด้วยกับคุณในการใช้ b2LoopShape ฉันสามารถสร้างความชันเป็นความต้องการของฉัน แต่ตามลิงค์ที่คุณโพสต์ ปัญหาคือมันไม่ได้นำไปสู่พอร์ตแฟลชของ box2d เพียงแค่รุ่น c ++ 1. ) คุณมีข้อเสนอแนะสำหรับเรื่องนี้หรือไม่? หรือ 2. ) คุณรู้จักเครื่องยนต์ฟิสิกส์อื่น ๆ ของแฟลชที่อนุญาตให้สร้างทางลาดโค้งหรือไม่?
พระนารายณ์

ฉันไม่คิดว่าพอร์ต Flash ของ Box2D เป็นรุ่นล่าสุดที่มีประเภทข้อต่อ / รูปร่างใหม่ ฉันไม่รู้เลยว่าเอ็นจิ้นฟิสิกส์ใดบ้างที่มีให้สำหรับ Flash นอกเหนือจาก Box2D

@ Joe: ถ้าฉันถามคุณถ้าเป็นไปได้ถ้าฉันพยายามเขียน AS class สำหรับ b2LoopShape? เพื่อที่ฉันจะได้รวมเข้ากับ Box2d Flash api ฉันจะต้องเริ่มจากตรงไหน เบาะแสใด ๆ
พระนารายณ์

1

กางเกงแฟนซีถูกสร้างขึ้นใน Flash และ Flash มีวิธีการเฉพาะที่เรียกว่า 'hitTest' ซึ่งช่วยให้คุณทดสอบพิกเซล (ในกรณีนี้เขาอาจทำการทดสอบพิกเซล 2-3 พิกเซลที่ด้านล่างของอักขระกางเกงแฟนซี) กับสิ่งที่วาดออกมา ภายในวัตถุ movieclip ที่กำหนด อาจเป็นเรื่องยุ่งยากเล็กน้อยที่จะทำให้มันรู้สึกถูกต้อง แต่ฟังก์ชั่นในตัวนี้เป็นเหตุให้เกม Flash จำนวนมากมีการชนกับทางลาด กระบวนการมีความซับซ้อนมากขึ้นสำหรับเครื่องมืออื่น ๆ ส่วนใหญ่และมักจะต้องทำด้วยตนเอง แต่มีวิธีการที่แตกต่างกันเล็กน้อย

วิธีที่ฉันคุ้นเคยมากที่สุดคือถ้าเครื่องยนต์ของคุณเป็นแบบเรียงต่อกัน (คิดว่า Sonic the Hedgehog) กระเบื้องที่กำหนดเป็นแบบโค้งแต่ละคนอาจมีสูตรที่กำหนดตำแหน่งการชน 'Y' ตามตำแหน่ง 'X' ปัจจุบันของตัวละคร บนกระเบื้องนั้น คุณจะต้องกำหนดสูตรโดยพิจารณาจากความชันและความโค้งที่คุณต้องการ คุณสามารถใช้เครื่องคิดเลขกราฟหรือโปรแกรมสร้างกราฟเพื่อทดสอบกับสูตรต่างๆ คุณสามารถมีไทล์ได้หลายอันที่มีส่วนโค้งและสูตรที่ต่างกันซึ่งสัมพันธ์กับพวกมันในลักษณะนี้


Sonic ไม่มีสูตรโค้งสำหรับกระเบื้อง มันใช้แผนที่ความสูง 2d สำหรับแต่ละพิกเซล
AttackHobo

@AttackingHobo: คุณสามารถบอกฉันว่าแผนที่ 2dheight สำหรับแต่ละพิกเซลคืออะไรหรือคุณสามารถชี้ให้ฉันไปยังสถานที่ที่ฉันสามารถใช้สิ่งนั้นกับเกมแฟลชได้หรือไม่?
พระนารายณ์

2
info.sonicretro.org/Sonic_Physics_Guideลองดูที่นี่ ฉันไม่รู้ว่าจะช่วยคุณได้หรือไม่ถ้าคุณใช้ box 2d คุณอาจต้องหมุนเอนจิ้นฟิสิกส์ของคุณเอง
AttackHobo

@ การเข้าร่วม Hobo: มีความได้เปรียบหรือความเป็นไปได้ในการ "ทำ" ลานโค้งถ้าฉันลองสร้างคลาส AS 3.0 ที่อนุญาตให้ลูปใน box2d api?
พระนารายณ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.