วิธีจัดการการค้นหาเส้นทางและการเคลื่อนย้ายเอนทิตีในโลกเครือข่ายขนาดใหญ่


12

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

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

ขอบคุณ!

คำตอบ:


9

สำหรับการเริ่มต้นง่ายๆคุณสามารถใช้พฤติกรรมการบังคับเลี้ยวได้ โดยเฉพาะแสวงหาพฤติกรรม ป้อนคำอธิบายรูปภาพที่นี่

นอกเหนือจากการที่กำลังมองหาตัวอักษรที่ควรใช้การหลีกเลี่ยงที่จะคัดท้ายห่างจากอุปสรรค

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

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

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

การบังคับเลี้ยวจะช่วยให้คุณกำหนดความเร็วในการเลี้ยวสูงสุดและความเร็วสูงสุดสำหรับศัตรู

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


นี่หมายถึงการจำลองพฤติกรรมการหมุนพวงมาลัยบนเซิร์ฟเวอร์ด้วยหรือฉันสามารถ 'เอนกาย' ตามเอนทิตี้ของเส้นทางได้หรือไม่ ฉันไม่ต้องการการตกตะกอนขนาดใหญ่
วอฮ์นฮิลต์ส

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

+1 สำหรับคำตอบที่ดี ขอบคุณที่ช่วยฉันประหยัดหลายชั่วโมง
Md Mahbubur Rahman

1

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

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

แต่ที่สำคัญกว่านั้นไม่ได้ดูสมจริงและอาจติดผนัง! ฉันไม่ต้องการจำลองการเคลื่อนไหวทั้งหมดบนเซิร์ฟเวอร์หากสามารถหลีกเลี่ยงได้ ...

คุณต้องจำลองการเคลื่อนไหวบนเซิร์ฟเวอร์ คุณจะรู้ได้อย่างไรว่าผู้เล่นทุกคนมีพฤติกรรมแบบเดียวกัน?

คุณจะต้องมีการบอกกล่าวพื้นฐานบางอย่าง A * เป็นมาตรฐาน คุณสามารถคำนวณเส้นทางไปยังเป้าหมายจากนั้นติดตามเส้นทางนั้นเป็นเพียงกรณีของการตั้งค่าเวกเตอร์การเคลื่อนไหวดังกล่าวข้างต้น (หรือคุณสามารถใช้พฤติกรรมการบังคับทิศทางเหมือนกับคำตอบของ Byte56 ซึ่งเป็นสิ่งเดียวกับการเพิ่มพิเศษ)

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