คำถามติดแท็ก entity

4
การพลาดแคชและการใช้งานใน Entity Systems
เมื่อเร็ว ๆ นี้ฉันได้ทำการค้นคว้าและนำระบบ Entity มาใช้สำหรับกรอบงานของฉัน ฉันคิดว่าฉันอ่านบทความเกือบทั้งหมด reddits และคำถามเกี่ยวกับมันที่ฉันสามารถหาได้และจนถึงตอนนี้ฉันคิดว่าฉันเข้าใจความคิดที่ดีพอ อย่างไรก็ตามมันทำให้เกิดคำถามบางอย่างเกี่ยวกับพฤติกรรม C ++ โดยรวมภาษาที่ฉันใช้ระบบเอนทิตีในรวมถึงปัญหาการใช้งานบางอย่าง ดังนั้นวิธีการหนึ่งก็คือการจัดเก็บอาร์เรย์ของส่วนประกอบในเอนทิตีโดยตรงซึ่งฉันไม่ได้ทำเพราะมันทำลายสถานที่เก็บแคชเมื่อวนซ้ำผ่านข้อมูล ด้วยเหตุนี้ฉันจึงตัดสินใจที่จะมีหนึ่งอาเรย์ต่อประเภทส่วนประกอบดังนั้นส่วนประกอบทั้งหมดของประเภทเดียวกันจึงต่อเนื่องกันในหน่วยความจำซึ่งควรเป็นทางออกที่ดีที่สุดสำหรับการวนซ้ำอย่างรวดเร็ว แต่เมื่อฉันต้องทำซ้ำอาร์เรย์ของส่วนประกอบเพื่อทำบางสิ่งบางอย่างกับพวกเขาจากระบบในการติดตั้งเกมจริงฉันสังเกตว่าฉันมักจะทำงานกับส่วนประกอบสองชนิดหรือมากกว่าในคราวเดียว ตัวอย่างเช่นระบบการเรนเดอร์ใช้องค์ประกอบการแปลงและโมเดลร่วมกันเพื่อทำการเรียกการเรนเดอร์ คำถามของฉันคือเนื่องจากฉันไม่ได้วนซ้ำแถวลำดับที่ต่อเนื่องกันในแต่ละครั้งในกรณีเหล่านี้ฉันจะเสียสละประสิทธิภาพที่เพิ่มขึ้นทันทีจากการจัดสรรส่วนประกอบด้วยวิธีนี้หรือไม่? เป็นปัญหาหรือไม่เมื่อฉันทำซ้ำใน C ++ อาร์เรย์ที่ต่อเนื่องกันสองชุดและใช้ข้อมูลจากทั้งสองในแต่ละรอบ อีกสิ่งหนึ่งที่ฉันต้องการถามคือควรเก็บการอ้างอิงถึงส่วนประกอบหรือเอนทิตีอย่างไรเนื่องจากลักษณะของการจัดวางองค์ประกอบในหน่วยความจำพวกเขาสามารถสลับตำแหน่งในอาเรย์ได้อย่างง่ายดาย ลดขนาดปล่อยให้ตัวชี้ส่วนประกอบของฉันหรือจัดการไม่ถูกต้อง คุณจะแนะนำให้จัดการกับกรณีเหล่านี้อย่างไรเนื่องจากฉันมักจะพบว่าตัวเองต้องการทำงานกับการแปลงและส่วนประกอบอื่น ๆ ทุกเฟรมและถ้ามือจับหรือตัวชี้ของฉันไม่ถูกต้องมันค่อนข้างยุ่งที่จะทำการค้นหาทุกเฟรม

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

3
จะพัฒนาเกมเอนทิตีแบบต่อเนื่องในเกมเทิร์นเบสได้อย่างไร?
จนถึงขณะนี้ระบบส่วนประกอบเอนทิตีที่ฉันใช้เคยทำงานเหมือนอาร์ทิมิสของ Java: ข้อมูลทั้งหมดในส่วนประกอบ ระบบอิสระไร้สัญชาติ (อย่างน้อยถึงระดับที่พวกเขาไม่ต้องการอินพุตในการกำหนดค่าเริ่มต้น) วนซ้ำแต่ละเอนทิตีที่มีเฉพาะส่วนประกอบที่ระบบเฉพาะสนใจ ทุกระบบประมวลผลเอนทิตีของพวกเขาหนึ่งขีดแล้วทุกอย่างก็เริ่มต้นขึ้น ตอนนี้ฉันพยายามที่จะใช้สิ่งนี้กับเกมเทิร์นเบสเป็นครั้งแรกโดยมีเหตุการณ์และคำตอบมากมายที่ต้องเกิดขึ้นตามลำดับที่สัมพันธ์กับแต่ละคนก่อนที่เกมจะสามารถเดินหน้าต่อไปได้ ตัวอย่าง: ผู้เล่น A ได้รับความเสียหายจากดาบ ในการตอบสนองต่อสิ่งนี้เกราะของ A จะเข้ามาและลดความเสียหายที่ได้รับ ความเร็วในการเคลื่อนที่ของ A นั้นลดลงด้วยเช่นกันเนื่องจากความอ่อนแอ ความเสียหายที่ได้รับนั้นเป็นสิ่งที่ทำให้เกิดปฏิสัมพันธ์ทั้งหมด เกราะจะต้องคำนวณและนำไปใช้กับความเสียหายที่เข้ามาก่อนที่ความเสียหายจะถูกนำไปใช้กับผู้เล่น การลดความเร็วในการเคลื่อนที่ไม่สามารถใช้กับยูนิตได้จนกว่าจะได้รับความเสียหายจริง ๆ แล้วเนื่องจากมันขึ้นอยู่กับจำนวนดาเมจสุดท้าย เหตุการณ์ยังสามารถทริกเกอร์เหตุการณ์อื่น ๆ การลดความเสียหายของดาบโดยใช้เกราะสามารถทำให้ดาบแตก (ต้องเกิดขึ้นก่อนที่การลดความเสียหายจะเสร็จสิ้น) ซึ่งจะทำให้เกิดเหตุการณ์เพิ่มเติมในการตอบสนองต่อมัน สรุปทั้งหมดนี้ดูเหมือนจะนำไปสู่ปัญหาเล็กน้อย: วงจรการประมวลผลที่สูญเปล่ามากมาย: ระบบส่วนใหญ่ (บันทึกสำหรับสิ่งต่าง ๆ ที่ทำงานอยู่ตลอดเวลาเช่นการเรนเดอร์) ก็ไม่มีอะไรคุ้มค่าที่จะทำเมื่อมันไม่ใช่ "การเลี้ยว" ในการทำงานและใช้เวลาส่วนใหญ่รอเกม สถานะการทำงานที่ถูกต้อง litters นี้ทุกระบบดังกล่าวด้วยการตรวจสอบที่มีการเติบโตในขนาดที่รัฐเพิ่มเติมจะถูกเพิ่มเข้าไปในเกม ในการตรวจสอบว่าระบบสามารถประมวลผลเอนทิตีที่มีอยู่ในเกมได้หรือไม่พวกเขาต้องการวิธีในการตรวจสอบสถานะเอนทิตี / ระบบอื่น ๆ ที่ไม่เกี่ยวข้อง (ระบบที่รับผิดชอบในการจัดการความเสียหายจำเป็นต้องรู้ว่ามีการใช้เกราะหรือไม่) นี่อาจทำให้ระบบยุ่งเหยิงด้วยความรับผิดชอบหลายอย่างหรือสร้างความต้องการระบบเพิ่มเติมโดยไม่มีจุดประสงค์อื่น แต่เพื่อสแกนคอลเล็กชั่นเอนทิตีหลังจากแต่ละรอบการประมวลผลและสื่อสารกับกลุ่มผู้ฟังโดยบอกพวกเขาเมื่อมันไม่เป็นไร จุดสองจุดด้านบนสมมติว่าระบบทำงานบนเอนทิตีชุดเดียวกันซึ่งจบลงด้วยการเปลี่ยนสถานะโดยใช้แฟล็กในส่วนประกอบ อีกวิธีในการแก้ปัญหาก็คือการเพิ่ม …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.