จะเพิ่มเสียงที่ AI ศัตรูสามารถได้ยินได้อย่างไร?


10

ได้รับ:

  • เกม 2D จากบนลงล่าง
  • ไทล์จะถูกเก็บไว้ในอาร์เรย์ 2 มิติ
  • กระเบื้องทุกแผ่นมีคุณสมบัติ - รองรับ (ดังนั้นอิฐอาจจะเป็น -50db, อากาศอาจเป็น -1)

จากนี้ฉันต้องการเพิ่มมันเพื่อสร้างเสียงที่จุด x1, y1 และ "กระเพื่อม" ภาพด้านล่างแสดงความคิดเห็นได้ดีกว่า เห็นได้ชัดว่าเป้าหมายสุดท้ายคือศัตรู AI สามารถ "ได้ยิน" เสียง - แต่ถ้ากำแพงปิดกั้นเสียงจะไม่เดินทางไกล

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

สีแดงเป็นผนังซึ่งมีการรองรับ 50db

ฉันคิดว่าในเกมที่ 3 ฉันรู้สึกสับสนกับคณิตศาสตร์

อะไรจะเป็นวิธีที่ดีที่สุดในการดำเนินการนี้


1
คุณสนใจเกี่ยวกับเสียงที่สะท้อน / ก้องกังวานหรือไม่? นั่นคือถ้าส่วนของผนังกันเสียงอยู่ระหว่างแหล่งกำเนิดเสียงกับตัวแทน AI โดยตรง แต่ผนังสามารถเดินไปรอบ ๆ ได้อย่างอิสระตัวแทน AI ควรได้ยินเสียงหรือไม่ หากคำตอบคือไม่ให้อัปเดตแต่ละเซลล์เพียงครั้งเดียวต่อเสียงดังนั้นการลดเสียงจะใช้เพียงครั้งเดียวกับแหล่งเสียงแต่ละแหล่ง หากคุณมีตัวแทน AI ไม่กี่รายเพียงแค่ติดตามบรรทัดจากแหล่งที่มาถึงตัวแทน
Sean Middleditch

เป้าหมายคือมีตัวแทน 'โง่ ๆ ' หลายคนติดตามเสียงของคุณรอบ ๆ กำแพงและทำอะไรไม่ได้
Chris

คำตอบ:


7

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

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

นี่เป็นปัญหาการแก้ปัญหาการพาไม่ออกและอาจแก้ไขได้ดีที่สุดโดยใช้อัลกอริทึมของ Dijkstra นี่เป็นการค้นหาจุดหนึ่งถึงหลายจุด (แหล่งกำเนิดเสียงหนึ่งแห่ง, ศัตรูหลายตัว) และสามารถแก้ไขได้อย่างมีประสิทธิภาพโดยเริ่มต้นที่จุดเดียว

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

เมื่อใดก็ตามที่คุณในระหว่างกระบวนการนี้ถึงกระเบื้องกับศัตรูคุณจะรู้ว่าศัตรูได้ยินเสียงใดบ้าง


1
+1 สำหรับการเดินทางด้วยเสียงทันที KISS นอกจากว่าคุณกำลังสร้างแบบจำลองทางฟิสิกส์ที่ใส่ใจเกี่ยวกับสิ่งนั้น
Hackworth

อืมฟังดูดีจริงๆ ฉันเห็นด้วยกับ @Hackworth เกี่ยวกับการทำให้มันง่าย เสียงที่เกิดขึ้นทันทีคือ 'เงินได้ลดลง' ทันทีที่มีการพูดถึงนาที ฉันได้เริ่มอ่านเกี่ยวกับอัลกอริทึมของ Dijkstra แต่เพื่อยืนยันว่ามันสามารถรวมโหนดที่มีน้ำหนักเพื่อปรับสำหรับผนังประเภทต่าง ๆ ได้หรือไม่
Chris

@ Chris ใช่ Dijkstra ของยังทำงานร่วมกับโหนถ่วงน้ำหนักซึ่งจะเป็นวิธีที่ดีในการสร้างแบบจำลองผนัง (เช่นน้ำหนักจะลดปริมาณและอื่น ๆ )
bummzack

9

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


ฉันเห็นด้วยกับคำตอบนี้
bobobobo

โครงสร้างข้อมูลที่เก็บเสียงนั้นจะง่ายกว่ามากเช่นนี้
Chris

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

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

@ Tim Holt - จุดดีฉันไม่ได้คิดตามบรรทัดเหล่านั้น
Chris

0

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

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

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

หากคุณกำลังสร้างแบบจำลอง AI ที่สนใจว่าเสียงมาจากไหนวิธีการหลังจะช่วยได้ - AI จะ 'ได้ยิน' เสียงนั้นมาจากทิศทางของส่วนสุดท้ายบนเส้นทาง ถ้ามีสองเส้นทางที่ได้ยินไปยังผู้รับพวกเขาอาจจะสับสนเกี่ยวกับเสียงที่หลากหลายและทิศทางที่จะรับ


1
เสียงเป็นคลื่นที่ส่งผ่านของไหล อาจไม่เหมาะสมในการจำลองสถานการณ์ในเกม แต่นั่นไม่ใช่ "ไม่ใช่เสียงที่ทำงาน"
Kevin Reid

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