เคลื่อนที่ไปรอบ ๆ / หลีกเลี่ยงอุปสรรค


12

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

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

ฉันจะใช้อัลกอริทึมการค้นหาพา ธ ได้อย่างไรหากฉันมี 3 จุด
(และอะไรจะทำให้สิ่งต่าง ๆ ซับซ้อนมากขึ้นถ้าคุณสามารถวางสิ่งกีดขวางได้หลายอย่าง?)
เส้นทางที่ราบรื่น

คำตอบ:


9

วิธีการทั่วไปและทั่วไปคือการแบ่งพื้นที่โลกของคุณเป็นกริดและใช้อัลกอริทึมเช่น A *

ลิงค์นี้ช่วยให้ฉันเริ่มต้นด้วยความเข้าใจและใช้อัลกอริทึม A *

แก้ไข :

ความคิดที่เรียบง่ายที่อยู่ในใจของฉันคือ ... เมื่อคุณมีโลกเข้าสู่กริดเซลล์ ให้มีจุดสีดำตามแมนฮัตตันระยะทางถึงจุดสีเขียว จากนั้นคุณสามารถกำหนดน้ำหนักให้กับแต่ละเซลล์ สิ่งกีดขวางสามารถมีน้ำหนักสูงในเซลล์กริดและสามารถเคลื่อนที่ได้อย่างอิสระ (สมมติว่า) มีน้ำหนัก 0 ในขณะที่คุณเคลื่อนที่ไปตามระยะแมนฮัตตันสำหรับการเคลื่อนที่แต่ละครั้งให้ตรวจสอบว่าน้ำหนักของเซลล์ถัดไปไม่สูงกว่าน้ำหนักของเซลล์ปัจจุบันหรือไม่ ถ้าสูงกว่าให้ตรวจสอบน้ำหนักของเซลล์ที่อยู่ติดกันแล้วไปต่อ

หวังว่านี่จะช่วยได้


บทความอัลกอริทึม A * นี้ดูเหมือนจะเป็นสิ่งที่ฉันกำลังมองหา แต่น่าเสียดายที่ฉันยังไม่รู้คือวิธีแบ่ง "โลก" ของฉันออกเป็นกริด: S
ผู้ใช้

มันขึ้นอยู่กับ ความคิด: แบ่งโลกของคุณออกเป็นกริด 32 x 32 ซึ่งจะแสดงตำแหน่งในอาร์เรย์ 2 มิติ ตัวอย่างเช่นในกรณีของคุณ: จุดสีแดงอยู่ที่ 120, 120 พิกเซล (หรือ 120/32 x 120/32: 3.75 x 3.75) 3.75 x 3.75 หมายถึงตำแหน่งบนกริดโลกของคุณ (หรืออาร์เรย์ 2D) เนื่องจากอาร์เรย์จะถูกทำดัชนีโดยจำนวนเต็มคุณต้องการเฉพาะจำนวนเต็มเท่านั้น ดังนั้นจุดสีแดงจะอยู่ที่ 3 x 3 หวังว่านี่จะช่วยได้
brainydexter

18

พฤติกรรมการบังคับเลี้ยวได้รับการออกแบบมาสำหรับชุดปัญหาที่แน่นอนนี้

http://www.red3d.com/cwr/steer/

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


พฤติกรรมการบังคับเลี้ยวสมบูรณ์แบบสำหรับสิ่งนี้
tenpn

2

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

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