คำถามติดแท็ก component-based

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

1
อะไรคือบทบาทของ“ ระบบ” ในสถาปัตยกรรมเอนทิตีที่อิงองค์ประกอบ
ฉันได้อ่านเกี่ยวกับองค์ประกอบและระบบเอนทิตีและได้คิดว่าความคิดของเอนทิตีที่เพิ่งเป็น ID นั้นค่อนข้างน่าสนใจ อย่างไรก็ตามฉันไม่ทราบวิธีการทำงานอย่างสมบูรณ์กับองค์ประกอบด้านหรือด้านระบบ ส่วนประกอบเป็นเพียงวัตถุข้อมูลที่จัดการโดยระบบที่เกี่ยวข้อง ระบบการชนใช้ BoundsComponent ร่วมกับโครงสร้างข้อมูลเชิงพื้นที่เพื่อพิจารณาว่ามีการชนกันหรือไม่ ดีมากจนถึงตอนนี้ แต่ถ้าระบบหลาย ๆ ระบบต้องการเข้าถึงส่วนประกอบเดียวกัน ข้อมูลควรอยู่ที่ไหน ระบบอินพุตสามารถแก้ไขเอนทิตี BoundsComponent แต่ระบบฟิสิกส์ต้องการการเข้าถึงองค์ประกอบเดียวกันเช่นเดียวกับระบบการเรนเดอร์บางระบบ นอกจากนี้นิติบุคคลจะสร้างอย่างไร ข้อดีอย่างหนึ่งที่ฉันได้อ่านมามากคือความยืดหยุ่นในการสร้างเอนทิตี ระบบเชื่อมโยงกับส่วนประกอบอย่างแท้จริงหรือไม่? หากฉันต้องการแนะนำส่วนประกอบใหม่บางอย่างฉันต้องแนะนำระบบใหม่หรือแก้ไขส่วนประกอบที่มีอยู่ด้วยหรือไม่? อีกสิ่งที่ฉันได้อ่านบ่อยๆก็คือ 'ประเภท' ของเอนทิตีถูกอนุมานด้วยส่วนประกอบที่มันมี หากเอนทิตีของฉันเป็นเพียง ID ฉันจะรู้ได้อย่างไรว่าเอนทิตีโรบ็อตของฉันต้องถูกย้ายหรือเรนเดอร์และทำการแก้ไขโดยระบบบางระบบ ขออภัยสำหรับการโพสต์ยาว (หรืออย่างน้อยก็ดูเหมือนจากหน้าจอโทรศัพท์ของฉัน)!

1
การใช้ระบบเอนทิตีตามองค์ประกอบจริง
เมื่อวานนี้ฉันได้อ่านงานนำเสนอจาก GDC Canada เกี่ยวกับระบบเอนทิตีแอตทริบิวต์ / พฤติกรรมและฉันคิดว่ามันยอดเยี่ยมมาก อย่างไรก็ตามฉันไม่แน่ใจว่าจะใช้งานได้อย่างไรไม่ใช่ในทางทฤษฎี ก่อนอื่นฉันจะอธิบายให้คุณทราบอย่างรวดเร็วว่าระบบนี้ทำงานอย่างไร แต่ละเอนทิตีเกม (เกมวัตถุ) ประกอบด้วยคุณลักษณะ (= ข้อมูลซึ่งสามารถเข้าถึงได้โดยพฤติกรรม แต่ยังรวมถึง 'รหัสภายนอก') และพฤติกรรม (= ตรรกะซึ่งมีOnUpdate()และOnMessage()) ดังนั้นสำหรับตัวอย่างเช่นในโคลนฝ่าวงล้อมอิฐแต่ละคนจะต้องประกอบด้วย (ตัวอย่าง): PositionAttribute , ColorAttribute , HealthAttribute , RenderableBehaviour , HitBehaviour คนสุดท้ายอาจมีลักษณะเช่นนี้ (เป็นเพียงตัวอย่างที่ไม่ทำงานเขียนใน C #): void OnMessage(Message m) { if (m is CollisionMessage) // CollisionMessage is inherited from Message { Entity otherEntity …

3
ในเอ็นจินเอ็นติตี้ - คอมโพเนนต์ - ระบบฉันจะจัดการกับกลุ่มของเอนทิตีที่พึ่งพาได้อย่างไร
หลังจากผ่านรูปแบบการออกแบบเกมมาสองสามครั้งฉันได้ตกลงกับ Entity-Component-System (ระบบ ES) สำหรับเอ็นจิ้นเกมของฉัน ฉันอ่านบทความ (ส่วนใหญ่เป็นT = Machine ) และตรวจสอบซอร์สโค้ดและฉันคิดว่าฉันเริ่มต้นได้เพียงพอแล้ว มีเพียงแนวคิดพื้นฐานเดียวที่ฉันกำลังดิ้นรนอยู่ ฉันจะจัดการกับกลุ่มของเอนทิตีที่ต้องพึ่งพาซึ่งกันและกันได้อย่างไร ให้ฉันใช้ตัวอย่าง: สมมติว่าฉันสร้างปืนเหนือศีรษะแบบมาตรฐาน (คิดว่าเจมส์ทาวน์ ) และฉันต้องการสร้าง "หัวหน้าเอนทิตี" ที่มีหลายส่วนที่แตกต่างกัน แต่เชื่อมต่อกัน การพังทลายอาจมีลักษณะเช่นนี้: ตัวเรือ: การเคลื่อนไหว, การแสดงผล ปืนใหญ่: ตำแหน่ง (ล็อคโดยสัมพันธ์กับตัวเรือ), ติดตาม \ Fire ที่ฮีโร่, สร้างความเสียหายจนกว่าจะปิดการใช้งาน แกนหลัก: ตำแหน่ง (ล็อคโดยสัมพันธ์กับตัวเรือ), การติดตาม \ Fire ที่ฮีโร่, ทำความเสียหายจนกว่าจะปิดการใช้งาน, ปิดใช้งาน (เอ่อ ... ทำลาย) เอนทิตีอื่น ๆ ทั้งหมดในกลุ่มเรือ เป้าหมายของฉันจะเป็นสิ่งที่จะระบุ (และจัดการ) …

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

4
ระบบส่วนประกอบ / ส่วนประกอบใน C ++ ฉันจะค้นหาชนิดและสร้างส่วนประกอบได้อย่างไร
ฉันกำลังทำงานกับระบบส่วนประกอบเอนทิตีใน C ++ ที่ฉันหวังว่าจะเป็นไปตามสไตล์ของอาร์ทิมิส (http://piemaster.net/2011/07/entity-component-artemis/) ในส่วนประกอบนั้นส่วนใหญ่เป็นถุงข้อมูลและเป็น ระบบที่มีตรรกะ ฉันหวังว่าจะใช้ประโยชน์จาก data-centess-ness ของวิธีการนี้และสร้างเครื่องมือเนื้อหาที่ดี อย่างไรก็ตามหนึ่งโคกที่ฉันเจอคือวิธีการใช้สตริงตัวระบุหรือ GUID จากไฟล์ข้อมูลและใช้เพื่อสร้างส่วนประกอบสำหรับ Entity เห็นได้ชัดว่าฉันสามารถมีฟังก์ชั่นการแยกวิเคราะห์ขนาดใหญ่ได้หนึ่งรายการ: Component* ParseComponentType(const std::string &typeName) { if (typeName == "RenderComponent") { return new RenderComponent(); } else if (typeName == "TransformComponent") { return new TransformComponent(); } else { return NULL: } } แต่นั่นน่าเกลียดจริงๆ ฉันตั้งใจจะเพิ่มและแก้ไขส่วนประกอบบ่อยครั้งและหวังว่าจะสร้าง ScriptedComponentComponent บางประเภทเช่นที่คุณสามารถนำส่วนประกอบและระบบมาใช้ใน Lua …

2
วิธีการเครือข่ายระบบนิติบุคคลนี้
ฉันได้ออกแบบระบบเอนทิตีสำหรับ FPS มันใช้งานได้ดังนี้: เรามี "โลก" - วัตถุเรียกว่า GameWorld สิ่งนี้ถืออาร์เรย์ของ GameObject เช่นเดียวกับอาร์เรย์ของ ComponentManager GameObject ถืออาร์เรย์ของ Component นอกจากนี้ยังมีกลไกเหตุการณ์ซึ่งง่ายมาก คอมโพเนนต์เองอาจส่งเหตุการณ์ไปยังเอนทิตีซึ่งออกอากาศไปยังส่วนประกอบทั้งหมด ส่วนประกอบนั้นเป็นสิ่งที่ให้ GameObject คุณสมบัติบางอย่างและเนื่องจาก GameObject เป็นเพียงภาชนะของพวกเขาทุกอย่างที่เกี่ยวข้องกับวัตถุเกมเกิดขึ้นในส่วนประกอบ ตัวอย่างเช่น ViewComponent, PhysicsComponent และ LogicComponent หากต้องการการสื่อสารระหว่างกันก็สามารถทำได้ผ่านการใช้เหตุการณ์ ComponentManager เป็นเพียงส่วนต่อประสานเช่นเดียวกับ Component และสำหรับแต่ละชั้น Component โดยทั่วไปควรจะมีหนึ่ง ComponentManager ผู้จัดการส่วนประกอบเหล่านี้มีความรับผิดชอบในการสร้างส่วนประกอบและเริ่มต้นพวกเขาด้วยคุณสมบัติอ่านจากสิ่งที่ชอบไฟล์ XML ComponentManager ยังดูแลการอัพเดทส่วนประกอบต่างๆเช่น PhysicsComponent ที่ฉันจะใช้ห้องสมุดภายนอก (ซึ่งทำทุกอย่างในโลกพร้อมกัน) สำหรับการกำหนดค่าฉันจะใช้โรงงานสำหรับเอนทิตีที่จะอ่านไฟล์ XML หรือสคริปต์สร้างส่วนประกอบที่ระบุในไฟล์ (ซึ่งเพิ่มการอ้างอิงไปยังผู้จัดการองค์ประกอบที่เหมาะสมสำหรับการอัปเดตจำนวนมาก) และ จากนั้นอัดมันเข้าไปในวัตถุ GameObject มาถึงปัญหาของฉันแล้วฉันจะลองใช้มันกับเกมที่มีผู้เล่นหลายคน …

5
ฉันจะใช้คุณสมบัติต่าง ๆ ในระบบเอนทิตีได้อย่างไร
หลังจากถามคำถามสองข้อเกี่ยวกับระบบเอนทิตี ( 1 , 2 ) และอ่านบทความเกี่ยวกับพวกเขาฉันคิดว่าฉันเข้าใจพวกเขาดีขึ้นกว่า แต่ก่อน ฉันยังมีความไม่แน่นอนอยู่บ้างส่วนใหญ่เกี่ยวกับการสร้างตัวส่งอนุภาคระบบอินพุตและกล้อง เห็นได้ชัดว่าฉันยังคงมีปัญหาในการทำความเข้าใจกับระบบเอนทิตีและพวกเขาอาจนำไปใช้กับวัตถุช่วงอื่น ๆ ทั้งหมด แต่ฉันเลือกสามข้อนี้เพราะมันเป็นแนวคิดที่แตกต่างกันมาก จัดการปัญหาเช่นนี้ด้วยตัวเองเมื่อพวกเขามา ฉันกำลังสร้างเอ็นจิ้นใน JavaScript และฉันได้นำคุณสมบัติหลักมาใช้ซึ่งรวมถึง: การจัดการอินพุต, ระบบภาพเคลื่อนไหวที่ยืดหยุ่น, ตัวส่งอนุภาค, คลาสคณิตศาสตร์และฟังก์ชั่น, การจัดการฉาก, กล้องและเรนเดอร์ ของสิ่งอื่น ๆ ที่เครื่องยนต์มักจะสนับสนุน ฉันอ่านคำตอบของ Byte56 ซึ่งทำให้ฉันสนใจที่จะทำให้เครื่องยนต์กลายเป็นระบบเอนทิตี มันจะยังคงเป็นเอ็นจิ้นเกม HTML5 ที่มีปรัชญาฉากพื้นฐาน แต่ควรสนับสนุนการสร้างเอนทิตีจากส่วนประกอบ ปัญหาที่ฉันมีตอนนี้คือปรับแนวคิดเครื่องยนต์เก่าของฉันให้เข้ากับกระบวนทัศน์การเขียนโปรแกรมใหม่นี้ นี่คือคำจำกัดความบางส่วนจากคำถามก่อนหน้านี้ที่อัปเดต: Entityเป็นตัวระบุ มันไม่มีข้อมูลใด ๆ ไม่ใช่วัตถุมันเป็นรหัสง่าย ๆ ที่แสดงดัชนีในรายการฉากของเอนทิตีทั้งหมด (ซึ่งจริง ๆ แล้วฉันวางแผนที่จะใช้เป็นเมทริกซ์คอมโพเนนต์) ตัวแทนเป็นผู้ถือข้อมูล แต่ด้วยวิธีการที่สามารถทำงานกับข้อมูลที่ ตัวอย่างที่ดีที่สุดคือองค์ประกอบVector2Dหรือ "ตำแหน่ง" มันมีข้อมูล: xและyแต่ยังมีบางส่วนวิธีการที่ทำให้การดำเนินงานเกี่ยวกับข้อมูลง่ายขึ้นเล็กน้อย: …

3
วิธีการนำการจัดการข้อความไปใช้อย่างเหมาะสมในระบบเอนทิตีที่อิงองค์ประกอบเป็นหลัก
ฉันกำลังใช้ชุดตัวเลือกของระบบเอนทิตีที่มี: ระดับ Entityที่มีน้อยกว่าประชาชนที่ผูกส่วนประกอบเข้าด้วยกัน กลุ่มของคลาสคอมโพเนนต์ที่ไม่มี "ตรรกะของคอมโพเนนต์" ซึ่งเป็นข้อมูลเท่านั้น กลุ่มของคลาสระบบ (aka "ระบบย่อย", "ผู้จัดการ") สิ่งเหล่านี้ทำการประมวลผลตรรกะเอนทิตีทั้งหมด ในกรณีพื้นฐานส่วนใหญ่ระบบจะทำซ้ำรายการของเอนทิตีที่พวกเขาสนใจและดำเนินการกับแต่ละรายการ วัตถุชั้น MessageChannelที่ใช้ร่วมกันโดยระบบเกมทั้งหมด แต่ละระบบสามารถสมัครสมาชิกเพื่อรับฟังข้อความบางประเภทและยังสามารถใช้ช่องทางในการส่งข้อความไปยังระบบอื่น ๆ ตัวแปรเริ่มต้นของการจัดการข้อความระบบมีดังนี้: เรียกใช้การอัปเดตในแต่ละระบบเกมตามลำดับ หากระบบทำบางสิ่งบางอย่างกับองค์ประกอบและการกระทำนั้นอาจเป็นที่สนใจของระบบอื่น ๆ ระบบจะส่งข้อความที่เหมาะสม (ตัวอย่างเช่นการเรียกระบบ messageChannel.Broadcast(new EntityMovedMessage(entity, oldPosition, newPosition)) เมื่อใดก็ตามที่มีการย้ายเอนทิตี) แต่ละระบบที่สมัครรับข้อความที่ระบุจะได้รับวิธีการจัดการข้อความ หากระบบกำลังจัดการเหตุการณ์และตรรกะการประมวลผลเหตุการณ์ต้องการข้อความอื่นที่จะเผยแพร่ข้อความจะได้รับการถ่ายทอดทันทีและวิธีการประมวลผลข้อความอีกสายหนึ่งถูกเรียก ตัวแปรนี้ก็โอเคจนกระทั่งฉันเริ่มปรับระบบตรวจจับการชนกันให้เหมาะสม (มันช้าลงจริงๆเมื่อจำนวนของเอนทิตีเพิ่มขึ้น) ในตอนแรกมันแค่วนซ้ำเอนทิตีแต่ละคู่โดยใช้อัลกอริทึมแรงเดรัจฉานอย่างง่าย จากนั้นฉันก็เพิ่ม "ดัชนีเชิงพื้นที่" ที่มีตารางของเซลล์ที่เก็บเอนทิตีที่อยู่ภายในพื้นที่ของเซลล์ที่เฉพาะเจาะจงจึงอนุญาตให้ทำการตรวจสอบเฉพาะเอนทิตีในเซลล์ข้างเคียง ทุกครั้งที่เอนทิตีย้ายระบบการชนจะตรวจสอบว่าเอนทิตีชนกับบางสิ่งในตำแหน่งใหม่หรือไม่ หากเป็นเช่นนั้นการชนจะได้รับการตรวจพบ และถ้าทั้งสองหน่วยงานชนกันเป็น "วัตถุทางกายภาพ" (ทั้งคู่มีองค์ประกอบ RigidBody และตั้งใจที่จะผลักกันออกไปเพื่อไม่ให้ครอบครองพื้นที่เดียวกัน) ระบบแยกตัวแข็งโดยเฉพาะขอให้ระบบการเคลื่อนไหวย้ายหน่วยงานไปบางส่วน ตำแหน่งเฉพาะที่จะแยกพวกเขา สิ่งนี้จะทำให้ระบบการเคลื่อนที่ส่งข้อความแจ้งเตือนเกี่ยวกับตำแหน่งเอนทิตีที่เปลี่ยนไป ระบบตรวจจับการชนหมายถึงการตอบสนองเพราะมันต้องการที่จะอัพเดทดัชนีอวกาศ ในบางกรณีมันทำให้เกิดปัญหาเนื่องจากเนื้อหาของเซลล์ (รายการทั่วไปของวัตถุเอนทิตีใน C #) …

5
การเพิ่มพลังในระบบที่ใช้ส่วนประกอบ
ฉันเพิ่งเริ่มได้รับการออกแบบตามส่วนประกอบ ผมไม่ทราบว่าสิ่งที่เป็น"สิทธิ"วิธีที่จะทำเช่นนี้คือ นี่คือสถานการณ์ ผู้เล่นสามารถใส่เกราะ โล่ถูกวาดเป็นฟองรอบผู้เล่นมันมีรูปร่างการชนที่แยกจากกันและลดความเสียหายที่ผู้เล่นได้รับจากเอฟเฟกต์ในพื้นที่ การหุ้มเกราะนั้นได้รับการออกแบบในเกมที่มีส่วนประกอบเป็นอย่างไร ที่ที่ฉันสับสนคือโล่มีส่วนประกอบสามอย่างที่เกี่ยวข้อง ลดความเสียหาย / กรอง สไปรต์ Collider เพื่อทำให้ความแตกต่างของเกราะที่แย่ลงอาจมีพฤติกรรมมากขึ้นซึ่งทั้งหมดอาจเป็นส่วนประกอบ: เพิ่มสุขภาพสูงสุดของผู้เล่น สุขภาพ regen การโก่งกระสุน ฯลฯ ฉันคิดอย่างนี้ไหม โล่ควรเป็นเพียงองค์ประกอบที่ยอดเยี่ยมหรือไม่ ฉันคิดว่านี่เป็นคำตอบที่ผิด ดังนั้นหากคุณคิดว่านี่เป็นวิธีที่จะไปกรุณาอธิบาย โล่ควรเป็นนิติบุคคลของตัวเองที่ติดตามตำแหน่งของผู้เล่นหรือไม่? นั่นอาจทำให้ยากต่อการใช้การกรองความเสียหาย นอกจากนี้ยังทำให้เส้นแบ่งระหว่างส่วนประกอบที่แนบกับเอนทิตี โล่ควรเป็นส่วนประกอบที่มีส่วนประกอบอื่นหรือไม่? ฉันไม่เคยเห็นหรือได้ยินอะไรแบบนี้ แต่อาจเป็นเรื่องปกติและฉันก็ยังไม่ลึกพอ โล่ควรเป็นชุดของส่วนประกอบที่เพิ่มเข้ากับเครื่องเล่นหรือไม่ อาจเป็นไปได้ที่จะมีองค์ประกอบพิเศษในการจัดการอื่น ๆ เช่นพวกเขาสามารถลบออกเป็นกลุ่ม (ทิ้งไว้เบื้องหลังองค์ประกอบการลดความเสียหายโดยไม่ตั้งใจตอนนี้น่าสนุก) มีอะไรอีกที่เห็นได้ชัดสำหรับคนที่มีประสบการณ์ด้านส่วนประกอบมากกว่าใช่ไหม

8
จะเป็นการดีกว่าถ้าใช้ XML / JSON / Text หรือฐานข้อมูลเพื่อจัดเก็บเนื้อหาของเกม
ฉันกำลังพิจารณาวิธีการนำเกมที่ใช้องค์ประกอบมาใช้ซึ่งดูเหมือนจะเป็นสิ่งที่ร้อนแรงและฉันชอบความคิดในการออกแบบที่ยืดหยุ่นเช่นนี้ หนึ่งในคุณสมบัติของการออกแบบคือการเพิ่มสิ่งใหม่ ๆ ลงในเกมสามารถทำได้ผ่านข้อมูลซึ่งมักจะนำเสนอเป็นการโหลดเนื้อหาผ่านไฟล์ข้อความเช่น XML นี่เป็นข้อได้เปรียบของการเป็นมนุษย์ที่สามารถอ่านและแก้ไขได้อย่างง่ายดายในตัวแก้ไขข้อความใด ๆ ข้อเสียข้อความอาจช้าลงในการจัดการและคุณต้องจัดการชุดข้อมูลขนาดใหญ่ รูปแบบข้อความที่คล้ายกันเช่น JSON หรือไฟล์กำหนดค่าจะมีประโยชน์เหมือนกัน ในอีกด้านหนึ่งมีฐานข้อมูลขนาดเล็กพกพาได้เช่น SQLite หรือ Tokyo Cabinet ในขณะที่คนอื่นไม่สามารถอ่านได้โดยตรงไฟล์เหล่านี้ใช้งานง่ายและฉันคิดว่าเครื่องมือการแก้ไขบางอย่างน่าจะเหมาะสำหรับการออกแบบเนื้อหาเกม การใช้ฐานข้อมูลช่วยให้การจัดเก็บข้อมูลการกำหนดค่าที่สอดคล้องกันและการดึงง่าย คุณสามารถจัดลำดับข้อมูลลงในฐานข้อมูลเพื่อบันทึกเกมได้เช่นกัน ประสิทธิภาพการทำงานที่ชาญฉลาดฉันคิดว่า XML โดยทั่วไปจะเร็วกว่าสำหรับไฟล์ขนาดเล็ก ฉันคิดว่าเกมจริง ๆ จะมีวัตถุในเกมมากมาย ดังนั้นคำถาม: วิธีใดดีกว่า ฉันเอนหลังไปยังฐานข้อมูล แต่ฉันต้องการที่จะรู้ว่ามีข้อผิดพลาดที่ซ่อนอยู่หรือข้อได้เปรียบที่แข็งแกร่งจริงกับไฟล์ข้อความ หรือหากมีทางเลือกอื่นนอกเหนือจากนี้ (เป็นรูปแบบไบนารี่เป็นรูปแบบไบนารีฉันเดา?)

4
ระดับที่เหมาะสมของความละเอียดสำหรับสถาปัตยกรรมที่ใช้ส่วนประกอบคืออะไร?
ฉันทำงานกับเกมที่มีสถาปัตยกรรมเป็นส่วนประกอบ Entityเป็นเจ้าของชุดของComponentกรณีแต่ละที่มีชุดของSlotกรณีที่ในการจัดเก็บส่งและรับค่า ฟังก์ชั่นจากโรงงานเช่นPlayerผลิตเอนทิตีด้วยส่วนประกอบที่จำเป็นและการเชื่อมต่อสล็อต ฉันกำลังพยายามหาระดับที่ดีที่สุดของส่วนประกอบสำหรับส่วนประกอบ ยกตัวอย่างเช่นในขณะนี้Position, VelocityและAccelerationมีทุกองค์ประกอบที่แยกจากกันเชื่อมต่อในชุด VelocityและAccelerationได้อย่างง่ายดายเขียนใหม่เข้าไปในเครื่องแบบDeltaส่วนประกอบหรือPosition, VelocityและAccelerationสามารถนำมารวมกันควบคู่ไปกับชิ้นส่วนเช่นFrictionและGravityเป็นเสาหินPhysicsส่วนประกอบ องค์ประกอบควรมีความรับผิดชอบที่น้อยที่สุดเท่าที่จะเป็นไปได้ (ในราคาที่มากจากการเชื่อมต่อระหว่างกัน) หรือส่วนประกอบที่เกี่ยวข้องควรรวมเข้าด้วยกันเป็นเสาหิน (ในราคาที่ยืดหยุ่น) ฉันเอนไปหาอดีต แต่ฉันสามารถใช้ความคิดเห็นที่สอง

4
มีเฟรมเวิร์กอิงส่วนประกอบ FOSS อยู่หรือไม่? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา กระบวนทัศน์การเขียนโปรแกรมเกมตามองค์ประกอบกำลังเป็นที่นิยมมากขึ้น ฉันสงสัยว่ามีโครงการใดบ้างที่นำเสนอเฟรมเวิร์กองค์ประกอบที่ใช้ซ้ำได้หรือไม่ ในทุกภาษาฉันคิดว่าฉันไม่สนใจเรื่องนั้น ไม่ใช่สำหรับโครงการของฉันฉันแค่อยากรู้ โดยเฉพาะฉันหมายถึงมีโครงการที่รวมEntityคลาสพื้นฐานComponentคลาสพื้นฐานและส่วนประกอบมาตรฐานบางอย่างหรือไม่ ถ้าหากคุณไม่ต้องการที่จะพลิกโฉมพวงมาลัยหรือบางทีคุณอาจต้องการเกมGraphicsComponentที่ทำได้ด้วย Direct3D แต่ถ้าคุณคิดว่ามันทำไปแล้วสิบครั้ง รวดเร็ว Googling จะเปิดขึ้นRusher มีใครเคยได้ยินหรือเคยใช้มันบ้าง หากไม่มีคนดังแล้วทำไมล่ะ มันยากเกินไปหรือไม่ที่จะทำสิ่งที่สามารถนำมาใช้ซ้ำได้เช่นนี้ ในการดำเนินการของฉันเองฉันพบจำนวนมากสำเร็จรูปที่สามารถผลักดันให้เป็นกรอบ

3
วิธีการ wire machine state finite ให้เป็นสถาปัตยกรรมที่อิงองค์ประกอบ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา เครื่องรัฐดูเหมือนจะก่อให้เกิดการพึ่งพาที่เป็นอันตรายในสถาปัตยกรรมที่ใช้ส่วนประกอบ มีการจัดการการสื่อสารระหว่างเครื่องรัฐและส่วนประกอบที่ดำเนินพฤติกรรมที่เกี่ยวข้องกับรัฐอย่างไรโดยเฉพาะ ฉันอยู่ที่ไหน: ฉันใหม่กับสถาปัตยกรรมที่อิงองค์ประกอบ ฉันกำลังสร้างเกมต่อสู้แม้ว่าฉันไม่คิดว่ามันจะสำคัญ ฉันนึกภาพเครื่องรัฐของฉันถูกใช้เพื่อสลับสถานะเช่น "หมอบคลาน", "ห้าว", "ปิดกั้น" ฯลฯ ฉันพบว่าเทคนิคการจัดการสถานะนี้เป็นระบบที่เป็นธรรมชาติที่สุดสำหรับสถาปัตยกรรมที่อิงองค์ประกอบ แต่มันขัดแย้งกับเทคนิคที่ฉันได้อ่าน: ระบบส่วนประกอบของวัตถุเกมแบบไดนามิกสำหรับตัวละครพฤติกรรมที่ไม่แน่นอนมันแสดงให้เห็นว่า ตัวเองโดยการตรวจสอบเงื่อนไขการเปิดใช้งานอย่างต่อเนื่อง ฉันคิดว่าการกระทำเช่น "วิ่ง" หรือ "เดิน" เข้าท่าเป็นเรื่องของรัฐซึ่งไม่เห็นด้วยกับคำตอบที่ยอมรับได้ที่นี่: /gamedev//a/7934 ฉันพบสิ่งนี้มีประโยชน์ แต่ไม่ชัดเจน: จะใช้พฤติกรรมอย่างไรในสถาปัตยกรรมเกมที่อิงส่วนประกอบได้อย่างไร มันแสดงให้เห็นว่ามีองค์ประกอบแยกต่างหากที่มีอะไรนอกจากเครื่องรัฐ แต่สิ่งนี้จำเป็นต้องมีการเชื่อมต่อระหว่างส่วนประกอบเครื่องรัฐกับส่วนประกอบอื่นเกือบทั้งหมด ฉันไม่เข้าใจวิธีจัดการข้อต่อนี้ นี่คือการเดาบางอย่าง: A. ส่วนประกอบขึ้นอยู่กับเครื่องของรัฐ: ส่วนประกอบได้รับการอ้างอิงถึงส่วนประกอบของเครื่องของgetState()รัฐซึ่งจะส่งกลับค่าคงที่การแจงนับ คอมโพเนนต์อัปเดตตัวเองเป็นประจำและตรวจสอบสิ่งนี้ตามความจำเป็น B. สถานะของเครื่องจักรขึ้นอยู่กับส่วนประกอบ: ส่วนประกอบ สถานะของเครื่องได้รับการอ้างอิงถึงส่วนประกอบทั้งหมดที่มีการตรวจสอบ มันสอบถามgetState()วิธีการของพวกเขาเพื่อดูว่าพวกเขาอยู่ที่ไหน C. สิ่งที่เป็นนามธรรมระหว่างพวกเขา ใช้ฮับเหตุการณ์? รูปแบบคำสั่ง? D. แยกสถานะของวัตถุที่ ใช้เป็นส่วนประกอบของรูปแบบสถานะอ้างอิง …

6
มีการออกแบบอะไรบ้างสำหรับระบบเอนทิตีที่อิงส่วนประกอบที่ใช้งานง่าย แต่ยังยืดหยุ่นได้
ฉันได้รับความสนใจในระบบเอนทิตีที่อิงองค์ประกอบอยู่พักหนึ่งแล้วอ่านบทความที่นับไม่ถ้วนในเกม (เกม InsomiacมาตรฐานEvolve Your Hierarchy , T-Machine , Chronoclast ... เพื่อชื่อไม่กี่คน) พวกเขาดูเหมือนจะมีโครงสร้างด้านนอกของสิ่งที่ชอบ: Entity e = Entity.Create(); e.AddComponent(RenderComponent, ...); //do lots of stuff e.GetComponent<PositionComponent>(...).SetPos(4, 5, 6); และถ้าคุณนำความคิดของข้อมูลที่ใช้ร่วมกัน (นี่คือการออกแบบที่ดีที่สุดที่ฉันเคยเห็นมาในแง่ของการไม่ทำซ้ำข้อมูลทุกที่) e.GetProperty<string>("Name").Value = "blah"; ใช่มันมีประสิทธิภาพมาก อย่างไรก็ตามการอ่านหรือเขียนนั้นไม่ใช่วิธีที่ง่ายที่สุด มันรู้สึกว่าเป็น clunky และทำงานกับคุณ โดยส่วนตัวฉันต้องการทำสิ่งที่ชอบ: e.SetPosition(4, 5, 6); e.Name = "Blah"; แม้ว่าแน่นอนว่าหนทางเดียวที่จะได้รับการออกแบบนั้นกลับมาอยู่ในเอนทิตี -> NPC-> ศัตรู -> FlyingEnemy-> FlyingEnemy- ด้วย …

4
วิธีการใช้พฤติกรรมในสถาปัตยกรรมเกมตามองค์ประกอบ?
ฉันเริ่มใช้ผู้เล่นและศัตรู AI ในเกม แต่ฉันสับสนเกี่ยวกับวิธีการนำสิ่งนี้ไปใช้ในสถาปัตยกรรมเกมตามส่วนประกอบได้ดีที่สุด ว่าฉันมีตัวละครของผู้เล่นดังต่อไปนี้ที่สามารถนิ่งวิ่งและแกว่งดาบ ผู้เล่นสามารถผ่านไปยังสถานะดาบสวิงจากทั้งที่อยู่กับที่และนิ่ง แต่จากนั้นจะต้องสวิงให้เสร็จสิ้นก่อนที่ผู้เล่นจะสามารถกลับมายืนหรือวิ่งต่อได้ ในระหว่างการแกว่งผู้เล่นไม่สามารถเดินไปรอบ ๆ อย่างที่ฉันเห็นฉันมีสองวิธีดำเนินการ: สร้างส่วนประกอบ AI เดียวที่มีลอจิกของผู้เล่นทั้งหมด (แยกออกจากองค์ประกอบจริงหรือฝังเป็น PlayerAIComponent) ฉันสามารถบังคับใช้ข้อ จำกัด ของรัฐได้อย่างง่ายดายโดยไม่ต้องสร้างการเชื่อมต่อระหว่างส่วนประกอบแต่ละอย่างที่ประกอบกันเป็นเอนทิตีของผู้เล่น อย่างไรก็ตามส่วนประกอบ AI ไม่สามารถแตกหักได้ ตัวอย่างเช่นถ้าฉันมีศัตรูที่สามารถยืนและเดินไปมาหรือเดินไปรอบ ๆ และแกว่งดาบเป็นครั้งคราวฉันต้องสร้างส่วนประกอบ AI ใหม่ แยกพฤติกรรมออกเป็นส่วน ๆ โดยระบุแต่ละสถานะ ฉันได้รับ StandComponent, WalkComponent และ SwingComponent ในการบังคับใช้กฎการเปลี่ยนแปลงฉันต้องจับคู่แต่ละองค์ประกอบ SwingComponent ต้องปิดการใช้งาน StandComponent และ WalkComponent ในช่วงระยะเวลาของการสวิง เมื่อฉันมีศัตรูที่ยืนอยู่เฉยๆแกว่งดาบเป็นครั้งคราวฉันต้องแน่ใจว่า SwingComponent นั้นปิดการใช้งาน WalkComponent หากมีอยู่ แม้ว่าสิ่งนี้จะช่วยให้ส่วนประกอบผสมและการจับคู่ที่ดีขึ้น แต่ก็สามารถนำไปสู่ฝันร้ายในการบำรุงรักษาได้เมื่อมีการเพิ่มการพึ่งพาแต่ละครั้งส่วนประกอบที่มีอยู่จะต้องได้รับการอัปเดตเพื่อให้เล่นได้ดีขึ้นกับข้อกำหนดใหม่ สถานการณ์ในอุดมคติคือผู้ออกแบบสามารถสร้างศัตรู / …

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