ปูกระเบื้องฟิสิกส์โดยใช้ Farseer


9

ฉันมีปัญหากับ Farseer Physics Engine ซึ่งในสภาพแวดล้อมที่มีการปูกระเบื้องวัตถุของฉันจะโต้ตอบกับมุมของวัตถุอื่น ๆ ในบางครั้งแม้ว่าวัตถุเหล่านั้นจะจัดเรียงอย่างสมบูรณ์แบบ

ปูกระเบื้องฟิสิกส์โดยใช้ Farseer

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

คำถามของฉันคืออะไรเป็นสาเหตุของมันคือมันลอยประเด็นความแม่นยำหรืออย่างอื่น? และมีวิธีแก้ไขหรือไม่โดยไม่ทำลายทั้งฟิสิกส์ของเครื่องยนต์?


ฉันสงสัยว่าคุณสามารถขยายกล่องการชนได้เพียงหนึ่งพิกเซลหรือไม่ดังนั้นมันจึงซ้อนทับกันเล็กน้อย มันอาจเห็นพื้นผิวที่เชื่อมต่อกันมากขึ้นบางที
Doug.McFarlane

@ ดั๊ก: ฉันเพิ่งทดสอบมันและมันก็ไม่ได้สร้างความแตกต่างเลย
William Mariager

แผ่นพื้นของวัตถุเคลื่อนที่หรือไม่?
bummzack

@bummzack: ใช่พวกเขา
William Mariager

ฉันมีปัญหาเดียวกันแน่นอน ฉันได้รับผลกระทบ "ใหญ่" เมื่อวัตถุที่เคลื่อนไหวได้ของฉันเป็นรูปสี่เหลี่ยมผืนผ้าหรือวงกลม ฉันยังไม่สามารถแปลงหลายช่องสี่เหลี่ยมเป็นสี่เหลี่ยมขนาดใหญ่เพราะฉันต้องการให้ผู้เล่นมีความสามารถในการ "ลบ" แต่ละไทล์ในบางสถานการณ์

คำตอบ:


5

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

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

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


จริงๆแล้วฉันได้เริ่มเขียนโค้ดเอนจิ้นฟิสิกส์ของตัวเองโดยเฉพาะสำหรับเอ็นจิ้นปูกระเบื้องนี้เพราะมันดูเหมือนจะไม่มีทางแก้ปัญหาที่สง่างาม
William Mariager

ฉันตัดสินใจที่จะทำเครื่องหมายคำตอบนี้เนื่องจากดูเหมือนจะไม่มีวิธีแก้ปัญหาใด ๆ ที่ง่ายและคุณจะดีกว่าที่จะเขียนโค้ดโซลูชันของคุณเอง หรือยอมรับว่าคุณไม่สามารถมีฟิสิกส์ที่แตกต่างกันและใช้ Marching Squares เพื่อสร้างวัตถุขนาดใหญ่
William Mariager

0

คุณสามารถปรับรูปร่างการชนของคุณให้เหมาะสมฉากนี้สามารถทำได้ด้วยสี่เหลี่ยมเพียงสี่มุม

คุณสามารถเข้าร่วมกล่องที่สัมพันธ์กันเพื่อทำให้กล่องใหญ่ขึ้น

วิดีโอนี้แสดงให้เห็นว่าhttp://www.youtube.com/watch?v=eyhGckHgkkE

เมื่อมีการเพิ่มกล่องคุณสามารถเห็นสี่เหลี่ยมผืนผ้าสีน้ำเงินที่มีรูปร่างที่เหมาะสม


1
ดังที่ฉันได้กล่าวไว้ในย่อหน้าที่สามการเปลี่ยนกลุ่มวัตถุให้เป็นวัตถุขนาดใหญ่นั้นไม่ใช่ตัวเลือกเนื่องจากฉันสูญเสียคุณสมบัติส่วนบุคคล
William Mariager

คุณสามารถจัดกลุ่มพวกเขาโดยคุณสมบัติ phisycal ของพวกเขาเช่นกัน ฉันคิดว่ามันไม่ใช่เรื่องปกติที่จะมีบล็อกทางกายภาพที่แตกต่างกันมากมาย
Blau

การจัดกลุ่มตามคุณสมบัติทางกายภาพจะทำให้ฉันมีปัญหาเดียวกันหากภูมิประเทศเปลี่ยนแปลงไปมาก อาจผิดปกติ แต่กระนั้นก็เป็นสิ่งที่ฉันต้องการ
William Mariager

0

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


ฉันทดสอบสิ่งนั้น การใช้หนึ่งสี่เหลี่ยมขนาดใหญ่ไม่มีปัญหา
William Mariager

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