โซลูชั่นมาตรฐานในการค้นหาเส้นทางไปยังเป้าหมายที่กำลังเคลื่อนที่คืออะไร


28

ฉันกำลังทำงานกับ 2D RTS เช่นเกมพื้นฐาน A * ทำงานได้อย่างสมบูรณ์แบบสำหรับการย้ายหน่วยจากจุด A ไปยังจุด B

แต่ตอนนี้ฉันเผชิญกับปัญหาการค้นหาเส้นทางอย่างต่อเนื่องเช่น A การโจมตีวัตถุที่เคลื่อนที่ B เรียก A * ในแต่ละเฟรมเมื่อการเปลี่ยนตำแหน่งของวัตถุ B ดูเหมือนไม่มีประสิทธิภาพ

ดังนั้นวิธีมาตรฐานสำหรับปัญหานี้คืออะไร?


1
ไม่มีวิธีมาตรฐาน
Kylotan

3
ไม่มีวิธีมาตรฐานเดียว แต่มีวรรณกรรมมากมายเกี่ยวกับวิธีการทั่วไปในการแก้ปัญหา

คำตอบ:


17

จากสิ่งที่ฉันรู้คุณสามารถดูอัลกอริทึม D * ซึ่งหมายถึง "Dynamic A *" อัลกอริทึมนี้ใช้ในการคำนวณการหาเส้นทางสำหรับสภาพแวดล้อมแบบไดนามิกที่นี่พร้อมเป้าหมายเคลื่อนที่

นี่คือกระดาษที่ใช้ D * สำหรับการค้นหาเส้นทางที่เคลื่อนที่ : การย้ายเป้าหมาย D * Lite


10

ทางเลือกหนึ่งคือการสร้างเส้นทางใหม่ทุก ๆ สองสามเฟรม หากคุณทำมันครั้งเดียวหรือสองครั้งต่อวินาทีมากกว่า 60+ ครั้งต่อวินาทีผู้ใช้จะไม่สังเกตเห็นจนกว่าพวกเขาจะเป็นวัตถุที่เคลื่อนไหวอย่างรวดเร็วทั้งสอง


8

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

วิธีการประมาณแบบง่าย ๆ อาจเป็นไปตามบรรทัด:

A = NPC

B = เป้าหมาย

T = เวลาที่จะไปที่ตำแหน่ง B: s (ตำแหน่งเริ่มต้น B: s)

คำนวณว่า B จะอยู่ในเวลา 'T' (ถ้า B ดำเนินการต่อที่ความเร็ว / มุมเดียวกัน) และไปที่นั่นแทน

นี่ไม่ใช่วิธีที่สมบูรณ์แบบเนื่องจากการเปลี่ยนแปลงระยะทาง แต่ง่ายกว่าการทำโซลูชันที่สมบูรณ์แบบและดีกว่าการพยายามเข้าถึง 'B'


3
ไม่รู้เรื่องสุนัข ฉันเรียนรู้บางอย่างวันนี้!
SteeveDroz

3

เห็นด้วยกับ Kylotan ว่าไม่มีวิธีมาตรฐาน

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

ให้ทำดีกว่านั้นยากมาก ถ้าคุณไม่มีความรู้เกี่ยวกับเส้นทางที่ไม่เปลี่ยนแปลงของเป้าหมายคุณกำลังมุ่งหน้าสู่ดินแดนแห่ง AI ที่ยากมากเพราะคุณจะมี AI ที่สองในการคาดเดาหรือจำลองพฤติกรรมเป้าหมายเพื่อคาดเดาว่าพวกเขาจะอยู่ที่ไหนและไปสู่เส้นทางนั้น AI ชนิดนี้เป็นเกม AB แบบเรียลไทม์จากทฤษฎีเกมซึ่งเป็นพื้นที่ที่ไม่ได้เป็นมาตรฐานในชุดเครื่องมือ AI เกม 3D


2

วิธีหนึ่งในการค้นหาเส้นทางแบบไดนามิกคือเอนทิตีทำนายตำแหน่งที่จะไปและไปที่นั่น

วิธีหนึ่งในการทำเช่นนี้คือการใช้ซีรี่ส์เทย์เลอร์

ฉันจะเรียกเส้นทางของเป้าหมายเมื่อเวลาผ่านไปฟังก์ชัน S (t) โดยที่ S คือตำแหน่งและ t คือเวลาปัจจุบันและการประมาณเส้นทางคือ A (f) และ f คือวันที่ในอนาคตอันใกล้เคียง .

ดังนั้นการประมาณค่าแบบง่ายและโง่ที่สุดคือ A (f) = 0

สิ่งที่ง่ายที่สุดถัดไปคือ A (f) = S (t) โดยที่ t คือเวลาปัจจุบันและ f คืออนาคต นี่เป็นการคาดการณ์เป้าหมายที่จะหยุดนิ่ง

สิ่งที่ง่ายที่สุดลำดับที่สามคือ A (f) = S '(t) * f + S (t) โดยที่ S' คืออนุพันธ์ของ S เทียบกับเวลา นี่เป็นการคาดการณ์เป้าหมายที่จะดำเนินต่อไปที่ความเร็วคงที่โดยไม่มีการเร่งความเร็ว

วิธีที่สี่ที่ง่ายที่สุดคือ A (f) = S '' (t) * f ^ 2/2 + S '(t) * f + S (t) นี่เป็นการคาดการณ์เป้าหมายที่จะเร่งด้วยความเร็วคงที่เหมือนลูกบอลตกลงมา

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


1

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

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