กลยุทธ์การจัดการกับฝูงชนที่จุดทำให้หายใจไม่ออก


9

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

ปัญหาการชนประตู

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

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

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


ฉันผิดหวังกับการควบคุมฝูงชนด้วย คุณช่วยเพิ่มลิงค์เกี่ยวกับ "การเคลื่อนไหวตามแรงกระตุ้น" ในคำถามได้ไหม?
Kromster

แรงกระตุ้นเป็นเพียงแรง * เวลา สิ่งที่ฉันพยายามจะพูดคือฉันได้ย้ายไปใช้แบบจำลองทางกายภาพโดยใช้แบบต่อเนื่องมากกว่าการตรวจจับการชนแบบไม่ต่อเนื่อง พฤติกรรมการบังคับทิศทางไม่เคารพสิ่งต่าง ๆ เช่นกฎการเคลื่อนที่ของนิวตันพวกมันถูกออกแบบมาเพื่อเลียนแบบฝูงนกแทนที่จะเป็นแบบจำลองทางฟิสิกส์ ฉันไม่มีลิงค์เชื่อมต่อ gamedev สำหรับการเคลื่อนไหวมันเป็นแค่ฟิสิกส์ระดับมัธยม อย่างไรก็ตามหนังสือของ Christer Ericson การตรวจจับการชนกันแบบเรียลไทม์เป็นเกมที่พัฒนาขึ้นอย่างมากสำหรับการตรวจจับการชนกันอย่างต่อเนื่อง
Fibbles

คำตอบ:


3

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


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

ฉันไม่ได้พิจารณาทีมหรือทีม การปรับแต่งของคุณดูเหมือนจะเป็นวิธีตรรกะในการแก้ไขคำตอบของฉัน
Pikalek

2

เพิ่มเวลาในการค้นหาเส้นทาง

นี่คือกระดาษที่พูดถึงลูกบาศก์เวลานั้น: http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Applications_files/coop-path-AIWisdom.pdf

ป้อนคำอธิบายรูปภาพที่นี่

และนี่คือการใช้งาน Objective-C: http://allseeing-i.com/ASIPathFinder

ป้อนคำอธิบายรูปภาพที่นี่


1
ฉันเคยอ่านเกี่ยวกับและใช้งานสิ่งนี้มาก่อน แม้จะมีหลายกระทู้ แต่ก็ไม่ค่อยมีประโยชน์อะไรในสถานการณ์ของฉัน ในเกม RTS สามารถมียูนิตที่เคลื่อนไหวและแผนที่กริดที่มีมากกว่า 500 สแควร์สไปยังด้านข้าง ค่าใช้จ่ายในการคำนวณเส้นทางตามเวลาสำหรับแต่ละหน่วยสูงเกินไป เพียงเพื่อเพิ่มฉันไม่ได้พูดว่าคำตอบของ rakkarage นั้นผิดมันเป็นอัลกอริทึมที่เรียบร้อยมาก ฉันแค่บอกว่าสถานการณ์ที่มีประโยชน์นั้นถูก จำกัด ด้วยความซับซ้อน
Fibbles

ya ฉันเพียงแค่เรียกใช้อัลกอริทึมเส้นทางของฉันอีกครั้งในแต่ละเทิร์นแทนการเข้าใจอย่างเต็มที่และการดำเนินการนี้ แต่ฉันคิดว่าฉันอาจจะต้องในที่สุด
Rakka Rage

0

จริงๆแล้วฉันไม่คิดว่าคุณควรจะแก้ไข ถ้า (ฉันอาจเดาได้) ลูกศรแสดงแรงเวกเตอร์ที่ใช้กับทรงกลมใด ๆ ที่ตำแหน่งใด ๆ ในตาราง (อาจสอดแทรก "bi-linearly" หรือในทำนองเดียวกันหรืออย่างใดอย่างหนึ่ง "อนาล็อก" มากกว่าแค่ 0/1) พฤติกรรมนั้นถูกต้องทางร่างกายและคุณควรแสดงความยินดีกับการมีพฤติกรรมที่ดี

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

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

บางทีแทนที่จะปิดการใช้งานที่ใกล้ที่สุดลูกศรซ้าย / ขวาแรงหรือจัดเรียงไว้ในบางวิธีอื่น ๆ ที่ไม่สมมาตรและไม่สนับสนุนความสมดุล ?

ฉันคิดว่ามันคงเป็นการแก้ไขที่ไม่ดีที่จะแก้ไขมันปลอม ... จะขนดกเร็วเกินไป


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

คำตอบของฉันคือ bascally: (อีกครั้ง) จัดกองกำลังหรือจัดเรียงอย่างอื่นในสถานการณ์ แต่ไม่เบียดเสียดแก้ฟิสิกส์ (" Imho สิ่งที่ควรได้รับการแก้ไขคือผนังหรือขนาดทรงกลมหรือสิ่งอื่นใดใน buildstones) ตัวเอง ") คำถามคือ " วิธีการใดที่มักใช้ในการแก้ไขสถานการณ์เช่นนี้" ฉันคิดว่า A ของฉันเป็น "วิธีที่ใช้กันทั่วไป" เป็นอย่างมากและเป็นวิธีแก้ไขปัญหาอย่างมาก ตัวอย่างเช่นเกมมินิกอล์ฟออนไลน์ (ซึ่ง Q เตือนให้ทำมาก) ทำให้หายใจไม่ออกหากสภาพแวดล้อมที่เรียกร้องให้เกิดขึ้น ฟิสิกส์ที่ผิดพลาดเป็นวิธีที่ไม่ดีเลย
Stormwind

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

อย่างที่คุณเห็นฉันยังเสนอให้จัดกองกำลังอีกครั้งในคำตอบ ดูเหมือนจะเหลือน้อยหลังจากนั้น :-)
Stormwind

การจัดเรียงผนังหรือปรับเปลี่ยนขนาดทรงกลมนั้นไม่สามารถใช้งานได้ในกรณีของฉันแม้ว่ามันอาจจะเป็นแบบอื่น สกรีนช็อตมาจากโหมดดีบักของเอ็นจิน RTS มีขนาดต่าง ๆ มากมายและผนังสามารถวางได้ตามความต้องการของผู้เล่น ลูกศรที่คุณเห็นเกิดจากอัลกอริธึม Fast Flow Fields ของฉัน พวกมันคือเวกเตอร์ที่ทำให้เป็นมาตรฐานซึ่งถูกใช้เพื่อมีอิทธิพลต่อทิศทางการเคลื่อนที่ของยูนิตที่เคลื่อนที่ได้ มันเป็นไปไม่ได้ที่จะเปลี่ยนความยาวของเวกเตอร์เพราะทุกหน่วยที่เคลื่อนที่ได้ในกลุ่มจะใช้สนามการไหลเดียวกัน
Fibbles
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.