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

รหัสมีโครงสร้างอย่างไร สำหรับคำถามเกี่ยวกับการออกแบบภายในของเอ็นจิ้นเกม

2
จะแก้ไขคู่ค่าคีย์ (เช่นพจนานุกรม) ในตัวตรวจสอบของ Unity ได้อย่างไร
ฉันมีระบบสะกดคำที่ฉันสร้างหลักการมีดังนี้: แต่ละคาถาเป็นรูปแบบสำเร็จรูปอัตโนมัติ มันมีสคริปต์ที่มีคุณสมบัติบางอย่าง (ความเสียหายพื้นฐานระยะเวลา ... ) ที่สามารถแก้ไขได้ในการตรวจสอบ ฉันมี Spell enum ที่แสดงรายการคาถาที่เป็นไปได้ทั้งหมดในรหัสซึ่งใช้ในตรรกะของเกม เมื่อฉันต้องการเสกคาถาฉันต้องได้รับพรีสแลชของคาถานี้เพื่อยกตัวอย่างและอ่านข้อมูล นักแสดงแต่ละคน (ไม่ว่าจะเป็นผู้เล่นหรือศัตรู) จำเป็นต้องมีรายการอนิเมชั่นที่เป็นไปได้สำหรับคาถา ปัญหาเกี่ยวกับวิธีที่ฉันพยายามใช้คือ: สำหรับการแสดงรายการแอนิเมชั่นของนักแสดงแต่ละคนฉันสามารถใช้ a Dictionary<Spell, Animation>ได้ แต่พจนานุกรมไม่ได้รับการสนับสนุนจากผู้ตรวจสอบซึ่งทำให้ยากที่จะแก้ไขนักแสดงหลายประเภทได้อย่างง่ายดาย ฉันต้องการวิธีในการเข้าถึง prefab คาถาจาก enum ที่เกี่ยวข้องได้อย่างง่ายดาย ที่นี่ฉันสามารถใช้พจนานุกรมได้ แต่ฉันสามารถอ้างอิงเฉพาะ prefab ในตัวตรวจสอบไม่ใช่ในรหัสซึ่งหมายความว่าฉันจะไม่สามารถเติมพจนานุกรมนี้ได้ ฉันกำลังมองหาวิธีที่จะเชื่อมโยงคาถาของฉันได้อย่างง่ายดาย enums กับ prefabs และภาพเคลื่อนไหวที่สอดคล้องกัน

12
ฉันจะมั่นใจได้อย่างไรว่าชิ้นส่วนของรหัสทำงานเพียงครั้งเดียว
ฉันมีรหัสบางอย่างที่ฉันต้องการเรียกใช้เพียงครั้งเดียวแม้ว่าสถานการณ์ที่เรียกรหัสนั้นอาจเกิดขึ้นหลายครั้ง ตัวอย่างเช่นเมื่อผู้ใช้คลิกเมาส์ฉันต้องการคลิกสิ่ง: void Update() { if(mousebuttonpressed) { ClickTheThing(); // I only want this to happen on the first click, // then never again. } } อย่างไรก็ตามด้วยรหัสนี้ทุกครั้งที่ฉันคลิกเมาส์สิ่งที่ได้รับการคลิก ฉันจะทำให้มันเกิดขึ้นเพียงครั้งเดียวได้อย่างไร

4
ทำไม MMORPG ยังคงใช้เซิร์ฟเวอร์หลายเครื่อง
MMORPGs, MOBA บางอย่างเช่น League of Legends หรือ StarCraft 2 มักจะบังคับให้คุณเลือกเซิร์ฟเวอร์ โดยปกติแล้วพวกเขาคือ US, EU และ SEA ใน MMORPG หลายแห่งต่อสถานที่ ฉันเห็นได้ว่ามีความจำเป็นเมื่อสองสามปีที่แล้ว แต่ตอนนี้ด้วย AWS และข้อเสนอที่คล้ายกันซึ่งทำให้คุณสามารถปรับขนาด "พลังงานของเซิร์ฟเวอร์" ได้อย่างราบรื่นทำไมจึงยังมีเซิร์ฟเวอร์แยกกัน รถไฟแห่งความคิดของฉันเป็นเช่นนี้ (ใช้ Star Wars: The Old Republic เป็นตัวอย่าง): - คุณมักจะอยู่บนดาวเคราะห์ดวงหนึ่งเสมอ "อินสแตนซ์" ที่แยกได้จากดาวเคราะห์ดวงอื่น - หากมีคนจำนวนมากเกินไปบนดาวเคราะห์ดวงเดียว SW: TOR สร้างตัวอย่างใหม่ของโลกและทำให้ผู้เล่นอยู่ในนั้น - หากคุณออกจากโลก / สลับอินสแตนซ์คุณมีหน้าจอโหลด เหตุใดเกมจึงไม่สามารถสร้างอินสแตนซ์สำหรับโลกนี้ได้ ตัวอย่างนี้ (และมีเพียงอันนี้เท่านั้น) ที่มีข้อมูลปัจจุบันของคุณในฐานข้อมูลและจัดการผู้เล่น x …
18 architecture  mmo 

7
ฉันต้องการวัตถุจุดและเวกเตอร์หรือไม่ หรือเพียงแค่ใช้วัตถุ Vector เพื่อแสดงว่าเป็นจุดหรือไม่
การสร้างส่วนประกอบของเครื่องยนต์ที่ฉันกำลังพัฒนาพร้อมกับเพื่อน (จุดประสงค์การเรียนรู้) ฉันมาถึงข้อสงสัยนี้ ตอนแรกเรามีตัวสร้าง Point ดังต่อไปนี้: var Point = function( x, y ) { this.x = x; this.y = y; }; แต่พวกเขาเราเริ่มเพิ่มคณิตศาสตร์เวกเตอร์ลงไปและพวกเขาตัดสินใจเปลี่ยนชื่อเป็น Vector2d แต่ตอนนี้วิธีการบางอย่างค่อนข้างสับสน (อย่างน้อยในความคิดของฉัน) เช่นต่อไปนี้ซึ่งใช้ในการสร้างบรรทัด: //before the renaming of Point to Vector2, the parameters were startingPoint and endingPoint Geometry.Line = function( startingVector, endingVector ) { //... }; ฉันควรสร้างนวกรรมิกเฉพาะสำหรับวัตถุ Point …

6
Vector3 ควรสืบทอดจาก Vector2 หรือไม่
ฉันกำลังสร้างคู่ของชั้นเรียนVector2(X & Y) และVector3(X, Y และ Z) แต่ผมไม่ทราบว่าจะทำให้การVector3สืบทอดมาจากVector2หรือไม่ว่าการดำเนินการอีกครั้งตัวแปรสมาชิกm_xและm_yอีกครั้ง? ข้อดีและข้อเสียของแต่ละด้านคืออะไร แก้ไข:ฉันใช้ C ++ (VS2010)
18 c++  architecture 

3
สถาปัตยกรรมเอ็นจิ้นเกม MVC (Model-View-Controller) - ใช่หรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันกำลังอ่านหนังสือเล่มหนึ่งที่ยอดเยี่ยมGame Coding Completeและหนังสือเล่มนี้ขอแนะนำอย่างยิ่งให้ใช้วิธีMVC (Model-View-Controller)ด้วยเลเยอร์สำคัญสามประการ: แอปพลิเคชันเลเยอร์ เกมลอจิก มุมมองเกม สำหรับฉันแล้ววิธีการนี้ดูเหมือนว่าเป็นเกมเกินราคาสำหรับเกมคอมพิวเตอร์พกพา ความคิดเห็นของคุณคืออะไร มันคุ้มค่าหรือไม่ที่จะใช้สถาปัตยกรรมนี้แม้ว่ามันจะเพิ่มการสื่อสารเพิ่มเติมที่จำเป็นระหว่างโมดูลหรือไม่? การออกแบบนี้สามารถใช้พลังงาน CPU มากในตอนท้ายผลลัพธ์จะช้าลงอย่างมีนัยสำคัญมากกว่าถ้ามันไม่ได้ถูกนำไปใช้?

4
ฉันจะทำอย่างไรเพื่อหลีกเลี่ยงการตั้งค่าสถานะและตรวจสอบครั้งเดียวตลอดทั้งรหัสของฉัน
พิจารณาการ์ดเกมเช่นHearthstone มีการ์ดหลายร้อยใบที่ทำสิ่งที่หลากหลายซึ่งบางอย่างก็มีเอกลักษณ์แม้แต่บัตรเดียว! ตัวอย่างเช่นมีการ์ด (เรียกว่า Nozdormu) ที่ช่วยลดผู้เล่นหันไปเพียง 15 วินาที! เมื่อคุณมีเอฟเฟกต์ที่อาจเป็นไปได้มากมายเช่นนี้คุณจะหลีกเลี่ยงตัวเลขเวทย์มนตร์และการตรวจสอบครั้งเดียวผ่านโค้ดของคุณได้อย่างไร วิธีใดวิธีหนึ่งที่หลีกเลี่ยงวิธี "Check_Nozdormu_In_Play" ในคลาส PlayerTurnTime และวิธีการหนึ่งที่สามารถจัดระเบียบรหัสดังกล่าวเมื่อคุณเพิ่มลักษณะพิเศษเพิ่มเติมคุณไม่จำเป็นต้อง refactor ระบบหลักเพื่อสนับสนุนสิ่งที่พวกเขาไม่เคยให้การสนับสนุนมาก่อน

5
วัตถุเกมควรรับรู้ซึ่งกันและกันอย่างไร?
ฉันพบว่ามันยากที่จะหาวิธีจัดระเบียบวัตถุในเกมเพื่อให้เป็น polymorphic แต่ในเวลาเดียวกันไม่ใช่ polymorphic นี่คือตัวอย่าง: สมมติว่าเราต้องการวัตถุทั้งหมดของเราและupdate() draw()ในการทำเช่นนั้นเราจำเป็นต้องกำหนดคลาสพื้นฐานGameObjectซึ่งมีสองวิธีเสมือนบริสุทธิ์และให้ polymorphism kicks ใน: class World { private: std::vector<GameObject*> objects; public: // ... update() { for (auto& o : objects) o->update(); for (auto& o : objects) o->draw(window); } }; เมธอดการอัพเดตควรดูแลสิ่งที่ระบุว่าอ็อบเจ็กต์คลาสเฉพาะต้องอัพเดต ความจริงก็คือแต่ละวัตถุจำเป็นต้องรู้เกี่ยวกับโลกรอบตัวพวกเขา ตัวอย่างเช่น: เหมืองจำเป็นต้องรู้ว่ามีใครปะทะกับมันหรือไม่ ทหารควรรู้ว่าทหารของทีมอื่นอยู่ใกล้หรือไม่ ซอมบี้ควรรู้ว่าสมองที่อยู่ใกล้ที่สุดภายในรัศมีนั้นอยู่ที่ไหน สำหรับการติดต่อเรื่อย ๆ (เช่นคนแรก) on_collide(GameObject*)ผมคิดว่าตรวจสอบการชนอาจมอบหมายว่าจะทำอย่างไรในกรณีที่เฉพาะเจาะจงของการชนกับวัตถุที่ตัวเองมี ข้อมูลอื่น ๆ ส่วนใหญ่ (เช่นอีกสองตัวอย่าง) อาจถูกสอบถามโดยโลกของเกมที่ส่งผ่านไปยังupdateวิธีการ …
18 c++  architecture 

3
วิธีการรหัส UI / HUD ในระบบองค์กร?
ฉันคิดว่าฉันมีความคิดเกี่ยวกับระบบ Entity ที่ได้แรงบันดาลใจจาก Adam Martin (เครื่องจักร) ฉันต้องการเริ่มใช้สิ่งนี้สำหรับโครงการต่อไปของฉัน ฉันรู้พื้นฐานของเอนทิตีส่วนประกอบและระบบแล้ว ปัญหาของฉันคือวิธีจัดการ UI / HUD ตัวอย่างเช่นหน้าต่างภารกิจหน้าต่างทักษะหน้าต่างข้อมูลตัวละคร ฯลฯ คุณจัดการกับกิจกรรม UI ได้อย่างไร (เช่นการกดปุ่ม) สิ่งเหล่านี้เป็นสิ่งที่ไม่จำเป็นต้องประมวลผลทุกเฟรม ขณะนี้ฉันกำลังใช้ MVC เป็น code UI แต่ฉันไม่คิดว่าจะเข้ากันได้กับ Entity System ฉันได้อ่านแล้วว่าเอนทิตีระบบฝังอยู่บน OOP ที่ใหญ่กว่า ฉันไม่รู้ว่า UI อยู่นอก ES หรือไม่ ฉันจะเข้าใกล้คนนี้ได้อย่างไร

1
ฉันจะใช้สถานะถาวรสำหรับวัตถุที่กำหนดในระดับได้อย่างไร
ฉันกำลังพัฒนา Metroidvania 2D ซึ่งประกอบด้วยชุดของระดับที่เชื่อมต่อระหว่างกันที่สามารถมาได้อีกครั้ง แต่ละระดับจะแสดงด้วยไฟล์ Tiled TMXซึ่งฉันได้ระบุตำแหน่งที่วัตถุต่าง ๆ ของคลาสสไปรต์ที่แตกต่างกันวางไข่ (ตัวอย่างเช่นศัตรูรถปิคอัพคันโยก ฯลฯ ) เมื่อเริ่มเกมใหม่โหลดเกมที่บันทึกไว้หรือเปลี่ยนระดับลูปเกมของฉันจะทำงานผ่านไฟล์ TMX ที่เหมาะสมและสร้างวัตถุทั้งหมดในระดับนั้น ฉันจัดการกับการเปลี่ยนแปลงระดับด้วยวิธีต่อไปนี้: หากPlayerวัตถุตัดกันPortalวัตถุchange_map()วิธีการหนึ่งถูกเรียกใช้ซึ่งโหลดแผนที่ใหม่ (อันที่เกี่ยวข้องกับพอร์ทัลที่ตัดกัน) และวางตำแหน่งผู้เล่นในตำแหน่งที่เหมาะสมบนแผนที่ใหม่ วัตถุบางอย่างของฉันมีสถานะซึ่งฉันต้องการที่จะคงอยู่ผ่านการเปลี่ยนแปลงระดับและบันทึกและเลิกเล่นเกม ตัวอย่างเช่นหากผู้เล่นปลดล็อคประตูและคุณลักษณะสถานะของประตูถูกตั้งค่าเป็น "เปิด" ฉันต้องการให้ประตูเปิดเมื่อผู้เล่นกลับมา ฉันต้องการสิ่งที่คล้ายกับคันโยกซึ่งสามารถตั้งค่าเป็นซ้ายหรือขวาและวัตถุอื่น ๆ นอกจากนี้ผู้เล่นบางครั้งจะมีรายการที่ฉันไม่ต้องการที่จะเกิดใหม่เมื่อผู้เล่นกลับมาที่พื้นที่ คำถามของฉันคือฉันจะจัดการกับความเพียรแบบนี้ได้อย่างไร ฉันทำงานใน Python แม้ว่าฉันคิดว่าคุณสามารถหลีกเลี่ยงได้

4
ฉันจะออกแบบการโจมตีประเภทต่าง ๆ จำนวนมากที่สามารถรวมกันได้อย่างไร
ฉันสร้างเกม 2D จากบนลงล่างและฉันต้องการที่จะมีประเภทการโจมตีที่แตกต่างกันมากมาย ฉันต้องการทำให้การโจมตีมีความยืดหยุ่นมากและรวมกันได้อย่างที่ The Binding of Isaac ทำงานได้ นี่คือรายชื่อของสะสมทั้งหมดในเกม ที่จะหาตัวอย่างที่ดีให้ดูที่ช้อนประมาทรายการ Spoon Bender ทำให้ไอแซคมีความสามารถในการยิงน้ำตากลับบ้าน หากคุณดูที่ส่วน "การทำงานร่วมกัน" คุณจะเห็นว่ามันสามารถใช้ร่วมกับของสะสมอื่น ๆ เพื่อเอฟเฟกต์ที่น่าสนใจ แต่ใช้งานง่าย ตัวอย่างเช่นถ้ามันรวมเข้ากับThe Inner Eyeมัน "จะทำให้ Isaac ยิงกระสุนกลับบ้านหลายนัดพร้อมกัน" มันสมเหตุสมผลแล้วเพราะ The Inner Eye ทำให้ Isaac ยิงได้สามครั้ง สถาปัตยกรรมที่ดีในการออกแบบสิ่งนี้คืออะไร นี่คือวิธีการแก้ปัญหากำลังดุร้าย: if not spoon bender and not the inner eye then ... if spoon bender and …

6
คุณใช้ไดอะแกรมกับเกมจำลองหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันหมายถึง UML เป็นส่วนใหญ่ แต่วิธีการใดก็ได้ที่ใช้ได้จริง ดังนั้น - คุณทำแบบจำลองเกมของคุณด้วย UML / ไดอะแกรมอื่น ๆ หรือวิธีการต่าง ๆ หรือไม่? ฉันมีวิชาที่มหาวิทยาลัยของฉันเกี่ยวกับการสร้างแบบจำลองด้วย UML และดูเหมือนจะพยายามมากกว่าผลประโยชน์ที่เกิดขึ้นจริง แต่ฉันรู้ว่าอาจเป็นเพราะฉันไม่เคยสร้างระบบไอทีที่ซับซ้อนขนาดใหญ่ ดังนั้นมันจึงคุ้มค่าในขณะที่และไดอะแกรม / วิธีการประเภทใดมักจะเป็น * ที่ดีที่สุด? * แน่นอนว่าต้องเลือกใช้เครื่องมือคอนกรีตหลายครั้งเพื่อแก้ไขปัญหาที่เป็นรูปธรรม แต่อาจมีรูปแบบบางอย่าง แก้ไข:ฉันลืมสิ่งสำคัญ - คุณสร้างไดอะแกรมก่อนหรือหลังการนำสิ่งต่าง ๆ ไปใช้หรือไม่ สิ่งที่ฉันหมายถึงคือ - เมื่อมีการออกแบบและใช้งานสิ่งหนึ่งที่มักจะเปลี่ยนใจหรือสิ่งที่ไม่คาดคิดเกิดขึ้นและสิ่งหนึ่งที่ต้องทำการเปลี่ยนแปลงบางครั้งก็สำคัญ - และทำในไดอะแกรมที่ซับซ้อนอยู่แล้ว

4
เราจะช่วยโลกแห่งขั้นตอนได้อย่างไร?
ฉันเพิ่งอ่านเกี่ยวกับวิธีการสร้างโลกแห่งกระบวนการ ... แต่ฉันจะบันทึกได้อย่างไร ในเกมอย่างผู้ใช้ Terraria หรือ Minecraft สามารถปรับเปลี่ยนภูมิทัศน์ได้อย่างอิสระ แต่โลกนั้นไม่สามารถสร้างขึ้นมาใหม่ได้จากเมล็ดเริ่มต้น เทคนิคใดที่ใช้ในการบันทึกโลกที่มีขั้นตอน แต่สามารถแก้ไขได้?

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

1
วิธีการใช้การออกแบบข้อมูลเชิงวัตถุกับการเขียนโปรแกรมเชิงวัตถุ? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันได้อ่านบทความมากมายเกี่ยวกับ Data Oriented Design (DOD) และฉันเข้าใจ แต่ฉันไม่สามารถออกแบบระบบ Object Oriented Programming (OOP) โดยที่ DOD อยู่ในใจฉันคิดว่าการศึกษา OOP ของฉันกำลังบล็อกฉันอยู่ ฉันจะคิดว่าจะผสมสองอย่างนี้ได้อย่างไร วัตถุประสงค์คือมีส่วนต่อประสาน OOP ที่ดีในขณะที่ใช้ DOD เบื้องหลัง ฉันเห็นสิ่งนี้เช่นกัน แต่ก็ไม่ได้ช่วยอะไรมาก: /programming/3872354/how-to-apply-dop-and-keep-a-nice-user-interface
17 c++  architecture 

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