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

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

1
แยกฟิสิกส์และตรรกะเกมออกจากรหัส UI
ฉันกำลังทำงานในเกมตัวต่อที่ง่าย การเล่นเกมประกอบไปด้วยบล็อกที่เคลื่อนไหวได้ค่อนข้างมากในบริเวณเกมดังนั้นมันเป็นการจำลองทางฟิสิกส์ที่ไม่สำคัญ อย่างไรก็ตามการใช้งานของฉันอยู่ในความคิดของฉันไกลจากอุดมคติและฉันสงสัยว่าถ้าคุณสามารถให้คำแนะนำกับฉันเกี่ยวกับวิธีที่จะทำให้ดีขึ้น ฉันแบ่งรหัสออกเป็นสองส่วน: ตรรกะของเกมและ UI อย่างที่ฉันทำกับเกมปริศนามากมาย: ตรรกะของเกมรับผิดชอบกฎทั่วไปของเกม (เช่นระบบกฎอย่างเป็นทางการในหมากรุก) UI แสดงพื้นที่เกมและชิ้นส่วน (เช่นกระดานหมากรุกและชิ้นส่วน) และรับผิดชอบภาพเคลื่อนไหว (เช่นการเคลื่อนไหวของชิ้นส่วนหมากรุก) ตรรกะของเกมแสดงถึงสถานะของเกมเป็นตารางตรรกะซึ่งแต่ละหน่วยเป็นความกว้าง / ความสูงของเซลล์หนึ่งในตาราง ดังนั้นสำหรับกริดที่มีความกว้าง 6 คุณสามารถย้ายบล็อกของความกว้าง 2 ได้สี่ครั้งจนกว่ามันจะชนกับขอบเขต UI ใช้กริดนี้และวาดโดยการแปลงขนาดโลจิคัลเป็นขนาดพิกเซล (นั่นคือคูณด้วยค่าคงที่) อย่างไรก็ตามเนื่องจากเกมแทบจะไม่ได้มีตรรกะของเกมเลยเลเยอร์ตรรกะในเกมของฉัน [1] จึงไม่ต้องทำอะไรมากมายนอกจากการตรวจจับการชน นี่คือวิธีการทำงาน: ผู้เล่นเริ่มลากชิ้นส่วน UI ถามตรรกะของเกมสำหรับพื้นที่การเคลื่อนไหวทางกฎหมายของชิ้นส่วนนั้นและให้ผู้เล่นลากมันภายในพื้นที่นั้น ผู้เล่นปล่อยชิ้นส่วนไป UI จัดเรียงส่วนเข้ากับกริด (เพื่อให้อยู่ในตำแหน่งตรรกะที่ถูกต้อง) UI บอกตรรกะของเกมถึงตำแหน่งโลจิคัลใหม่ (ผ่านวิธีการเปลี่ยนแปลงซึ่งฉันควรหลีกเลี่ยง) ฉันไม่ค่อยมีความสุขกับสิ่งนั้น: ฉันกำลังเขียนการทดสอบหน่วยสำหรับเลเยอร์เกมตรรกะของฉัน แต่ไม่ใช่ UI และมันกลับกลายเป็นว่ารหัสที่ยุ่งยากทั้งหมดนั้นอยู่ใน UI: การหยุดชิ้นส่วนจากการชนกับผู้อื่นหรือขอบเขตและสแนปอินตาราง ฉันไม่ชอบความจริงที่ว่า UI บอกตรรกะของเกมเกี่ยวกับสถานะใหม่ฉันอยากให้มันเรียกmovePieceLeft()วิธีการหรืออะไรทำนองนั้นเหมือนในเกมอื่น ๆ …

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

9
จะไปเกี่ยวกับองค์ประกอบ GUI ได้อย่างไร
หมายเหตุ: ฉันวางแผนที่จะสร้างระบบ GUI ของตัวเอง มันจะเป็นการดีสำหรับการเรียนรู้น้ำหนักเบามีเพียงบิตที่ฉันต้องการผูกติดกับเกมเป็นต้น ฉันกำลังคิดเกี่ยวกับวิธีการทำ องค์ประกอบที่ฉันหมายถึงคือ: ปุ่มตัวเลือก ป้อนข้อความที่นี่กล่อง ปุ่ม sliders ช่องทำเครื่องหมาย ฉันไม่ได้มองว่าจะทำอย่างไร แต่พวกเขาจะไปได้อย่างไร ความคิด ฉันจะมีแต่ละรัฐที่ต้องการสิ่งต่าง ๆ ดังนั้นเกือบทั้งหมดมีคอนเทนเนอร์ขององค์ประกอบ องค์ประกอบแต่ละชิ้นเป็น GUI แต่ละคนมีตำแหน่งกราฟิก ฯลฯ บิตที่ฉันติดมากขึ้นคือตรรกะของพวกเขา ความคิดของฉันสำหรับสิ่งนั้นเพื่อให้เป็นโมดุลและความเรียบง่ายคือการหลีกเลี่ยง MainMenuStartButton a OptionsOneBackButton เป็นต้นและสามารถใช้ Slider slider1 แทน หรือปุ่มเริ่ม; แต่แต่ละรายการจะมีฟังก์ชั่น boost :: ไปยังฟังก์ชันในเนมสเปซ GUI เช่น Gui :: StartButtonClick หรือ GUI :: ColourSliderHover ฉันแค่สงสัยว่ามันจะช้าเป็นพิเศษหรือไม่ และสำหรับเรื่องนั้นมีผู้ใดบ้าง ง่ายและเรียบง่ายในการทำ GUI สำหรับเกมหรือไม่? …
12 c++  architecture  gui 

6
ฉันควรวางซาวด์แทร็กไว้เบื้องหลังเกมวางแผนของฉันหรือไม่? เกมที่ต้องการเพลงและเสียง
การสับไพ่และเสียงกระทบเป็นสิ่งที่ยอดเยี่ยม (เป็นเกมที่ใช้ไพ่) แต่ฉันควรลงทุนเวลา / ความพยายามในการต่อเพลงแบ็คกราวนด์หรือไม่? ฉันพบPlay Audio จาก Stream โดยใช้ C #ซึ่งสามารถใช้ในการอนุญาตให้ hook ถึงDIหากออนไลน์หรือรหัสที่คล้ายกันสามารถใช้เล่น MP3 ในตัวเครื่องได้ แต่มันคุ้มค่าหรือไม่ เกมประเภทใดที่จำเป็นต้องใช้และสามารถทำได้โดยใด ปล่อยโดยไม่มีมันและเพิ่มเป็นคุณลักษณะ. 5 หรือไม่

5
เหตุใดจึงต้องใช้ไฟล์รายการเนื้อหา
บางครั้งคุณจะเห็นคนแนะนำว่าแทนที่จะใช้กราฟิก / ไฟล์เสียง / ฯลฯ แบบนี้... // Game code Image myImage = new Image("path/to/image.png"); ... คุณควรใช้ไฟล์Manifestเป็นระดับทางอ้อมแทน: // Manifest file MY_IMAGE: path/to/image.png // Game code Manifest myManifest = new Manifest("path/to/manifest"); Image myImage = myManifest.getImage("MY_IMAGE"); ฉันจะมีเหตุผลอะไรในการทำแนวทางนี้ หากฉันไม่ได้ใช้ภาษาที่คอมไพล์แล้วจะมีเหตุผลที่จะทำเช่นนี้หรือไม่?

1
การสร้างระบบรายการที่แข็งแกร่ง
จุดประสงค์ของฉันคือการสร้างระบบไอเท็มแบบโมดูลาร์ / แบบทั่วไปที่สามารถจัดการสิ่งต่าง ๆ เช่น: รายการที่อัปเกรดได้ (+6 Katana) ตัวดัดแปลงทางสถิติ (ความชำนาญ +15) ตัวดัดแปลงไอเท็ม (โอกาส X% ที่จะทำความเสียหาย Y, โอกาสที่จะถูกแช่แข็ง) รายการที่ชาร์จใหม่ได้ (พนักงาน Magic กับประเพณี 30) Set Items (ติดตั้ง X 4 ชุดเพื่อเปิดใช้งานคุณสมบัติ Y) หายาก (ทั่วไป, ไม่ซ้ำใคร, ตำนาน) ทำให้ไม่ลงรอยกัน (แบ่งเป็นวัสดุหัตถกรรมบางอย่าง) Craftable (สามารถสร้างขึ้นด้วยวัสดุบางอย่าง) ใช้งานได้ (5 นาที% พลังโจมตี X, รักษา +15 hp) * ฉันสามารถแก้ไขคุณสมบัติที่เป็นตัวหนาในการตั้งค่าต่อไปนี้ ตอนนี้ฉันพยายามเพิ่มตัวเลือกมากมายเพื่อสะท้อนสิ่งที่ฉันมีในใจ ฉันไม่ได้วางแผนที่จะเพิ่มคุณสมบัติเหล่านี้ทั้งหมดที่จำเป็น แต่ฉันต้องการที่จะสามารถใช้งานได้ตามที่เห็นสมควร …

3
การจัดกลุ่มเอนทิตีของส่วนประกอบเดียวกันที่กำหนดไว้ในหน่วยความจำเชิงเส้น
เราเริ่มต้นจากขั้นพื้นฐานวิธีการระบบส่วนประกอบที่มีหน่วยงาน ขอสร้างassemblages (ระยะที่ได้มาจากนี้บทความ) เพียงออกของข้อมูลเกี่ยวกับชนิดของชิ้นส่วน มันจะทำแบบไดนามิกที่รันไทม์เช่นเดียวกับที่เราจะเพิ่ม / ลบส่วนประกอบไปยังเอนทิตีทีละคน แต่ขอเพียงแค่ตั้งชื่อได้อย่างแม่นยำมากขึ้นเพราะมันเป็นเพียงเกี่ยวกับข้อมูลประเภท แล้วเราจะสร้างหน่วยงานที่ระบุการชุมนุมทุกครั้งของพวกเขา เมื่อเราสร้างเอนทิตีแล้วชุดประกอบของมันจะไม่เปลี่ยนรูปซึ่งหมายความว่าเราไม่สามารถแก้ไขได้โดยตรง แต่ก็ยังสามารถรับลายเซ็นของเอนทิตีที่มีอยู่ไปยังสำเนาภายในเครื่อง (พร้อมกับเนื้อหา) ทำการเปลี่ยนแปลงที่เหมาะสมและสร้างเอนทิตีใหม่ ของมัน ตอนนี้สำหรับแนวคิดหลัก: เมื่อใดก็ตามที่มีการสร้างเอนทิตีมันจะถูกกำหนดให้กับวัตถุที่เรียกว่าbucket bucketlageซึ่งหมายความว่าเอนทิตีทั้งหมดของลายเซ็นเดียวกันจะอยู่ในคอนเทนเนอร์เดียวกัน (เช่นใน std :: vector) ตอนนี้ระบบเพียงทำซ้ำผ่านทุกกลุ่มที่สนใจและทำงานของพวกเขา วิธีนี้มีข้อดีดังนี้ ส่วนประกอบถูกเก็บไว้ในหน่วยความจำที่ต่อเนื่องกันสองสามชิ้น (แม่นยำ: จำนวนถัง) - ช่วยเพิ่มความเป็นมิตรกับหน่วยความจำและง่ายต่อการทิ้งสถานะเกมทั้งหมด ระบบประมวลผลองค์ประกอบในลักษณะเชิงเส้นซึ่งหมายถึงการปรับปรุงการเชื่อมโยงกันแคช - ลาก่อนพจนานุกรมและหน่วยความจำแบบสุ่มกระโดด การสร้างเอนทิตีใหม่นั้นง่ายเหมือนการทำแผนที่ชุดประกอบเพื่อฝากข้อมูลและผลักดันส่วนประกอบที่ต้องการกลับไปยังเวกเตอร์ การลบเอนทิตีเป็นเรื่องง่ายเหมือนกับการเรียก std :: move เพื่อสลับองค์ประกอบสุดท้ายกับอันที่ถูกลบเพราะลำดับไม่สำคัญในตอนนี้ หากเรามีเอนทิตีจำนวนมากที่มีลายเซ็นที่แตกต่างกันโดยสิ้นเชิงประโยชน์ของการเชื่อมโยงกันของแคชลดน้อยลง แต่ฉันไม่คิดว่ามันจะเกิดขึ้นในแอปพลิเคชันส่วนใหญ่ นอกจากนี้ยังมีปัญหาเกี่ยวกับการทำให้ตัวชี้ใช้ไม่ได้เมื่อมีการจัดสรรเวกเตอร์ใหม่ซึ่งสามารถแก้ไขได้โดยการแนะนำโครงสร้างเช่น: struct assemblage_bucket { struct entity_watcher { assemblage_bucket* owner; entity_id real_index_in_vector; …

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

3
ฉันต้องการกำจัดรูปแบบการออกแบบที่ทำให้ทุกอย่างคงที่และเป็นสากล แต่อย่างไร
ฉันทำดันเจี้ยนเล็ก ๆ น้อย ๆ ในอวกาศและฉันอยากจะฟังคำแนะนำบางอย่างเกี่ยวกับวิธีสร้างแบ็กเอนด์ของเครื่องยนต์ที่ดีกว่า โดยทั่วไปปัจจุบันทุกอย่างขึ้นอยู่กับ crapload ของผู้จัดการ: BackgroundManager: มีAddBackground(image, parallax)วิธีในการสร้างเอฟเฟกต์ฉากหลังที่ยอดเยี่ยม ConfigManager: อ่าน / สร้างไฟล์ config และเก็บข้อมูลที่อ่านจากไฟล์ config นั้น DrawManager: มีDraw(sprite)วิธีการวาดสิ่งที่จะหน้าจอและสิ่งที่ชอบSetView(view), GetView()ฯลฯ EntityManager: เก็บเอนทิตีที่ใช้งานอยู่ทั้งหมดและมีวิธีการเพิ่มลบและค้นหาเอนทิตี DungeonManager (ที่จริงเรียกว่า GridManager แต่นี่คือความเรียบง่าย): มีวิธีการชอบGenerateDungeon(), PlaceEnemies(), PlaceFinish()ฯลฯ ตอนนี้ฉันยังไม่ได้บอกรายชื่อผู้จัดการทั้งหมดของฉันดังนั้นฉันคิดว่าสิ่งนี้ต้องเปลี่ยน เกมของฉันขึ้นอยู่กับหน้าจอซึ่งทำให้มันน่ารำคาญมากขึ้นเพราะฉันไม่ต้องการครึ่งหนึ่งของสิ่งที่ผู้จัดการของฉันกำลังจัดการอยู่เช่นเมนูหลัก (ฉันไม่ต้องการฟิสิกส์ / เอนทิตี / ดันเจี้ยนในเมนูหลักของฉัน !) ตอนนี้ฉันคิดเกี่ยวกับการทำให้ผู้จัดการไม่คงที่และให้ ScreenMainGame เป็นตัวอย่างของผู้จัดการเฉพาะเกมทั้งหมด แต่นั่นทำให้การโทร / รับอะไรก็ตามที่เกี่ยวข้องกับผู้จัดการเป็นเรื่องใหญ่ ... ตัวอย่างเช่นถ้าฉันต้องการดึงดันเจี้ยนของฉันจากสถานที่ใด ๆ ที่ไม่ได้อยู่ScreenMainGame.Draw()ฉันจะต้องทำสิ่งนี้ ... …

2
ฉันจะทำให้การโจมตีของผู้ชายที่ดีได้เพียงแค่โจมตีคนเลวและในทางกลับกันได้อย่างไร
เกมของฉันมีคนดีหลายประเภทและผู้ชายเลวหลายประเภท พวกเขาทั้งหมดจะทำการยิงขีปนาวุธใส่กัน แต่ฉันไม่ต้องการให้เกิดความเสียหายจากหลักประกันใด ๆ ที่เกิดขึ้นสำหรับการจัดเรียงอย่างใดอย่างหนึ่ง ดังนั้นคนเลวจึงไม่สามารถตี / ทำลายคนเลวคนอื่นและคนดีไม่ควรที่จะตี / ทำความเสียหายคนดีคนอื่น วิธีที่ฉันคิดว่าการแก้ปัญหานี้คือการทำให้มันเพื่อให้Unitอินสแตนซ์ (นี่คือ javascript, BTW) มีalignmentคุณสมบัติที่สามารถเป็นได้ทั้งหรือgood badและฉันจะปล่อยให้การปะทะเกิดขึ้นถ้า class Attack boolean didAttackCollideWithTarget(target) return attack.source.alignment != target.alignment and collisionDetected(attack.source, target) นี่คือรหัสหลอกแน่นอน แต่ฉันถามคำถามนี้เพราะฉันเข้าใจว่าอาจมีวิธีที่สง่างามกว่านี้ในการออกแบบนอกเหนือจากการเพิ่มคุณสมบัติอื่นให้กับUnitชั้นเรียน ของฉัน

4
จะกำหนดช่วงของการเคลื่อนไหวที่เป็นไปได้ในเกมวางแผนแบบอิงทางเลี้ยวหรือไม่?
ฉันกำลังสร้างเกมวางแผนกลยุทธ์แบบ 2 มิติโดยใช้ c ++ และ SFML-2.0 การเคลื่อนไหวเป็นไปตามระยะทางมากกว่าที่อิงตามกริดโดยมีชิ้นส่วนรูปสามเหลี่ยมที่แตกต่างกันหลายชิ้นตามลำดับที่กำหนดแต่ละรอบอาจหมุนในตำแหน่งหรือเคลื่อนที่ไปข้างหน้า การเคลื่อนไหวจะทำงานในลักษณะที่ผู้เล่นเลือกตำแหน่งสำหรับชิ้นส่วนที่จะย้ายไปซึ่งสร้างเส้นทางที่เป็นไปได้สำหรับชิ้นส่วนที่จะใช้ เมื่อผู้เล่นยืนยันการตัดสินใจของเขาหรือเธอชิ้นส่วนจะย้ายไปตามเส้นทางนั้นไปยังตำแหน่งที่ต้องการ เส้นทางถูก จำกัด โดยปัจจัยสองประการคือระยะทางระยะทางหนึ่งชิ้นที่สามารถไปได้โดยคำนึงถึงการเลี้ยวใด ๆ (ดังนั้นหากมีเส้นโค้งมันจะเป็นความยาวตามแนวโค้งและไม่ใช่จากจุดหนึ่งไปยังอีกจุด); และมุมบังคับเลี้ยวชิ้นส่วนสามารถหมุนที่จุดใดก็ได้ (และสูงสุด) ในขณะเคลื่อนที่ (เช่นจาก -30 ถึง 30 องศา) คำถามของฉันคือฉันควรทำอย่างไรในการกำหนดช่วงของตำแหน่งที่ผู้เล่นสามารถเลือกได้ ฉันไม่แน่ใจทั้งหมดว่าสมการและ / หรืออัลกอริทึมที่จะใช้ที่นี่ แผนเดิมของฉันซับซ้อนเกินกว่าจะถึงจุดที่มันเป็นไปไม่ได้ที่จะนำไปใช้ให้อธิบายเพียงอย่างเดียวและฉันมาถึงจุดนี้โดยสิ้นเชิงเมื่อโครงการหยุดทำงาน ฉันจะกำหนดช่วงที่หน่วยสามารถเคลื่อนที่ได้โดยพิจารณารัศมีการเลี้ยวของมันอย่างไร ตัวอย่างเช่นในภาพด้านล่าง เส้นสีแดงสีน้ำเงินและสีเขียวล้วนมีความยาวเท่ากัน วงกลมสีม่วงหมายถึงช่วงการเคลื่อนไหวที่ยูนิตสามารถเคลื่อนที่ได้ (รูปร่างอาจไม่ถูกต้องและเส้นอาจไม่ใช่ความยาวเท่ากันจริง ๆแต่คุณได้แนวคิด)

2
ทำให้ทักษะและความสามารถของตัวละครเป็นคำสั่งฝึกดีไหม?
ฉันกำลังออกแบบเกมที่ประกอบด้วยตัวละครที่มีทักษะการโจมตีที่ไม่เหมือนใครและความสามารถอื่น ๆ เช่นการสร้างการซ่อมแซมเป็นต้นผู้เล่นสามารถควบคุมตัวละครหลายตัวได้ ฉันกำลังคิดที่จะนำทักษะและความสามารถเช่นนั้นมาใช้ในการควบคุมของแต่ละคน ตัวควบคุมแบบสแตติกจะลงทะเบียนคำสั่งเหล่านี้ทั้งหมดลงในรายการคำสั่งแบบคงที่ รายการคงที่จะประกอบด้วยทักษะและความสามารถทั้งหมดของตัวละครทั้งหมดในเกม ดังนั้นเมื่อผู้เล่นเลือกหนึ่งในตัวละครและคลิกที่ปุ่มบน UI เพื่อเสกคาถาหรือแสดงความสามารถมุมมองจะเรียกคอนโทรลเลอร์แบบสแตติกเพื่อดึงคำสั่งที่ต้องการจากรายการและดำเนินการ สิ่งที่ฉันไม่แน่ใจ แต่ถ้าเป็นการออกแบบที่ดีเพราะฉันกำลังสร้างเกมของฉันใน Unity ฉันคิดว่าฉันสามารถสร้างทักษะและความสามารถทั้งหมดเป็นส่วนประกอบแต่ละอย่างซึ่งจะติดกับ GameObjects ซึ่งเป็นตัวแทนของตัวละครในเกม จากนั้น UI จะต้องเก็บ GameObject ของตัวละครไว้แล้วจึงดำเนินการคำสั่ง อะไรจะเป็นการออกแบบและการฝึกฝนที่ดีกว่าสำหรับเกมที่ฉันกำลังออกแบบ?

4
ฉันจะใช้หลายตาข่ายต่อเอนทิตีได้อย่างไรโดยไม่แยกส่วนประกอบหนึ่งประเภทเดียวต่อเอนทิตี
เราเพิ่งเปลี่ยนจากเอ็นจิ้นเกมตามลำดับชั้นเป็นเอ็นจิ้นเกมตามองค์ประกอบ ปัญหาของฉันคือเมื่อฉันโหลดแบบจำลองที่มีลำดับชั้นของตาข่ายและวิธีที่ฉันเข้าใจคือเอนทิตีในระบบที่ใช้องค์ประกอบไม่สามารถมีองค์ประกอบหลายประเภทเดียวกัน แต่ฉันต้องการ "meshComponent" สำหรับแต่ละ ตาข่ายในแบบจำลอง ดังนั้นฉันจะแก้ไขปัญหานี้ได้อย่างไร ในเว็บไซต์นี้พวกเขาใช้เอ็นจิ้นเกมแบบอิงคอมโพเนนต์: http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

6
การจัดการสถานะของเกม (เกม, เมนู, หน้าจอ Titles, ฯลฯ )
โดยพื้นฐานแล้วในทุก ๆ เกมที่ฉันทำมาจนถึงตอนนี้ฉันมักจะมีตัวแปรเช่น "current_state" ซึ่งสามารถเป็น "เกม", "ชื่อหน้าจอ", "หน้าจอเกม" เป็นต้น และจากฟังก์ชั่นอัพเดทของฉันฉันมีขนาดใหญ่มาก: if current_state == "game" game stuf ... else if current_state == "titlescreen" ... อย่างไรก็ตามฉันไม่รู้สึกว่านี่เป็นวิธีการจัดการมืออาชีพ / สะอาด มีความคิดเห็นเกี่ยวกับวิธีการทำเช่นนี้ในวิธีที่ดีกว่าหรือไม่ หรือเป็นวิธีมาตรฐานหรือไม่

2
พฤติกรรมการใช้งานในเกมผจญภัยง่าย ๆ
ฉันสนุกกับตัวเองเมื่อไม่นานมานี้โดยการเขียนโปรแกรมเกมผจญภัยที่ใช้ข้อความเป็นหลักและฉันก็ติดอยู่กับสิ่งที่ดูเหมือนว่าจะเป็นปัญหาการออกแบบที่เรียบง่ายมาก เพื่อให้ภาพรวมคร่าวๆ: เกมแบ่งย่อยเป็นRoomวัตถุ แต่ละRoomรายการมีEntityวัตถุที่อยู่ในห้องนั้น แต่ละคนEntityมีสถานะเหตุการณ์ซึ่งเป็นแผนที่แบบสตริง -> บูลีนอย่างง่ายและรายการการกระทำซึ่งเป็นแผนที่แบบสตริง -> ฟังก์ชั่น [action] [entity]ท่านผู้ใช้แบบฟอร์มที่ใช้ Roomใช้ชื่อนิติบุคคลที่จะกลับมาที่เหมาะสมEntityวัตถุซึ่งจากนั้นจะใช้ชื่อการกระทำที่จะหาฟังก์ชั่นที่ถูกต้องและดำเนินการมัน ในการสร้างคำอธิบายห้องพักแต่ละวัตถุแสดงสตริงคำอธิบายของตัวเองแล้วผนวกสตริงคำอธิบายของทุกRoom รายละเอียดอาจเปลี่ยนแปลงขึ้นอยู่กับสถานะของมัน ( "ประตูเปิด", "ประตูถูกปิด", "ประตูถูกล็อค" ฯลฯ )EntityEntity นี่คือปัญหา: การใช้วิธีนี้จำนวนฟังก์ชั่นคำอธิบายและการกระทำที่ฉันต้องนำมาใช้อย่างรวดเร็ว ห้องเริ่มต้นของฉันคนเดียวมีประมาณ 20 หน้าที่ระหว่าง 5 เอนทิตี ฉันสามารถรวมการกระทำทั้งหมดไว้ในฟังก์ชั่นเดียวและถ้า - อื่น / สลับไปมาได้ แต่ก็ยังมีสองฟังก์ชั่นต่อเอนทิตี ฉันยังสามารถสร้างEntityคลาสย่อยเฉพาะสำหรับวัตถุทั่วไป / ทั่วไปเช่นประตูและกุญแจได้ แก้ไข 1: ตามที่ร้องขอตัวอย่างรหัสเทียมของฟังก์ชันการกระทำเหล่านี้ string outsideDungeonBushesSearch(currentRoom, thisEntity, player) if thisEntity["is_searched"] then return "There was nothing …

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