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

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

2
ฉันควรใช้โปรแกรม OpenGL จำนวนเท่าใดเพื่อแสดงวัตถุหลายรายการ
ฉากของฉันมีวัตถุหลายอย่างในนั้น (สมมติว่า 3 ลูกบาศก์ 1 กระบอก 8 ทรงกลม) ฉันคิดว่าฉันควรสร้างจุดสุดยอดสำหรับแต่ละจุด ฉันควรมีกี่โปรแกรม ทางเลือก: หนึ่งโปรแกรมต่อวัตถุ โปรแกรมหนึ่งสำหรับลูกบาศก์ทั้งหมดและอีกอันสำหรับทรงกลมทั้งหมด (สมมติว่าพวกเขาใช้เฉดสีเดียวกัน) หนึ่งโปรแกรมขนาดใหญ่สำหรับทุกสิ่ง แนวทางที่ถูกต้องคืออะไร?

4
จะสร้างเกมที่ไม่มี OOP ได้อย่างไร? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันกำลังศึกษาการพัฒนาเกมและฝึกทำเกม ฉันใช้ OOP เป็นจำนวนมากในเกมของฉัน ตัวอย่างเช่นขีปนาวุธแต่ละตัวที่ถูกยิงเป็นตัวอย่างของMissileวัตถุและเพิ่มเข้าไปในรายการของMissileวัตถุ รถถังแต่ละคันในเกมนั้นเป็นTankวัตถุ เป็นต้น การออกแบบทั้งหมดของโปรแกรมขึ้นอยู่กับสิ่งนี้ ยกตัวอย่างเช่นการมีรายการของMissileวัตถุทำให้ฉันทุกเฟรมสามารถเคลื่อนย้ายขีปนาวุธดึงพวกมันได้ ฯลฯ และการมีตัวอย่างของTankวัตถุสำหรับรถถังทุกคันทำให้ฉันสามารถตรวจสอบแต่ละถังถ้ามันชนกับสิ่งอื่น ๆ มันยากสำหรับฉันที่จะจินตนาการว่าเกม (ซึ่งซับซ้อนกว่า Pac-Man) สามารถตั้งโปรแกรมในภาษาที่ไม่ใช่ OO (ไม่มีการดูหมิ่นผู้เขียนโปรแกรมที่ไม่ใช่ OO แน่นอน) ไม่เพียง แต่จะใช้เวลานานแค่ไหน แต่ส่วนใหญ่ในแง่ของวิธีการออกแบบเกมด้วยวิธีนี้ ฉันไม่สามารถจินตนาการถึงการออกแบบเกมโดยไม่ใช้การเขียนโปรแกรมเชิงวัตถุเพราะความเข้าใจของฉันทั้งหมดเกี่ยวกับวิธีการออกแบบโปรแกรมเกมนั้นใช้ OOP ฉันต้องการถาม: วันนี้มีเกมที่ไม่ได้ตั้งโปรแกรมโดยใช้ OOP ในลักษณะที่คุ้นเคยกับสิ่งที่ฉันอธิบายไว้ข้างต้นหรือไม่ มีเกมใด ๆ 'วิชาชีพ' ที่ไม่ได้ใช้ OOP เป็นปัจจัยสำคัญในกระบวนการพัฒนาหรือไม่? ถ้าเป็นเช่นนั้นคุณช่วยให้ฉันทราบได้อย่างไรตัวอย่างเช่นการตรวจจับการชนระหว่างรถถังและขีปนาวุธ N สามารถทำได้โดยไม่ต้องใช้ OOP?

3
ฉันจะสร้างแบบจำลองเกมตามเศรษฐกิจในรหัสได้อย่างไร
ฉันต้องการสร้างเกมเศรษฐกิจโดยยึดตามอารยธรรมโบราณ ฉันไม่แน่ใจว่าจะออกแบบมันอย่างไร ถ้าฉันทำงานในเกมที่มีขนาดเล็กกว่าเช่นสำเนาของ "Space Invaders" ฉันจะไม่มีปัญหาในการสร้างมันขึ้นมาเช่นนี้: คลาสควบคุมหลัก คลาสกราฟิก คลาสผู้เล่น ระดับศัตรู ฉันไม่เข้าใจว่าฉันจะทำเช่นนี้สำหรับโครงการขนาดใหญ่เช่นเกมเศรษฐกิจของฉันได้อย่างไร ฉันจะสร้างคลาสประเทศที่มีกลุ่มของเมืองหรือไม่? เมืองต่าง ๆ มีชั้นอาคารจำนวนมากหรือไม่ส่วนใหญ่จะมีชั้นเรียนของผู้คนหรือไม่? ฉันสร้างเส้นทางการค้นหาชั้นเรียนที่ผู้เล่นสามารถเข้าถึงเพื่อเดินทางไปได้หรือไม่?

3
จะหลีกเลี่ยง“ Blob-Systems” ในระบบองค์ประกอบของเอนทิตี้ได้อย่างไร?
ขณะนี้ฉันกำลังประสบปัญหาต่อไปนี้: ฉันพยายามเขียน pong clone โดยใช้ระบบ component component (ECS) ฉันเขียน "กรอบงาน" ทั้งหมดด้วยตัวเอง ดังนั้นจึงมีคลาสที่จัดการเอนทิตีกับส่วนประกอบทั้งหมด จากนั้นจะมีคลาสคอมโพเนนต์เอง และสุดท้ายก็มีระบบของฉันที่เพิ่งได้รับเอนทิตีทั้งหมดที่มีส่วนประกอบที่ระบบต้องการ ตัวอย่างเช่นระบบการเคลื่อนไหวของฉันค้นหาหน่วยงานทั้งหมดที่มีองค์ประกอบตำแหน่งและส่วนประกอบการเคลื่อนไหว องค์ประกอบตำแหน่งเพียงแค่ดำรงตำแหน่งและองค์ประกอบการเคลื่อนไหวจะเก็บความเร็ว แต่ปัญหาที่แท้จริงคือระบบการชนของฉัน ชั้นนี้เป็นเหมือนหยดตรรกะ ฉันมีคดีพิเศษมากมายในชั้นนี้ ตัวอย่างเช่น: พายของฉันสามารถชนกับเส้นขอบได้ หากสิ่งนี้เกิดขึ้นความเร็วของพวกเขาจะถูกตั้งค่าเป็นศูนย์ ลูกของฉันสามารถชนกับเส้นเขตแดนได้เช่นกัน แต่ในกรณีนี้ความเร็วของมันจะถูกสะท้อนกลับตามปกติของเส้นขอบดังนั้นมันจึงสะท้อนออกมา เมื่อต้องการทำสิ่งนี้ฉันได้ให้องค์ประกอบฟิสิกส์พิเศษแก่ลูกบอลซึ่งเพิ่งบอกว่า: "เฮ้สิ่งนี้ไม่หยุดเลยมันสะท้อน" ดังนั้นองค์ประกอบทางฟิสิกส์ไม่มีข้อมูลจริง มันเป็นคลาสที่ว่างเปล่าซึ่งมีเพียงเพื่อบอกระบบว่าวัตถุสะท้อนหรือหยุด จากนั้นก็มาที่นี่: ฉันต้องการที่จะทำให้อนุภาคบางอย่างเมื่อลูกชนกับไม้พายหรือเส้นขอบ ดังนั้นฉันคิดว่าลูกบอลจะต้องมีส่วนประกอบอื่นที่บอกระบบการชนเพื่อสร้างอนุภาคในการชน จากนั้นฉันต้องการมี ups พลังงานซึ่งสามารถชนกับไม้พายได้ แต่ไม่ใช่กับเส้นขอบ หากเกิดเหตุการณ์เช่นนี้การเพิ่มพลังจะต้องหายไป ดังนั้นฉันจึงต้องการเคสและส่วนประกอบมากขึ้น (เพื่อบอกระบบว่าบางหน่วยงานสามารถชนกับคนอื่น ๆ ได้บางคนบอทไม่ได้อยู่ด้วยแม้ว่าคนอื่น ๆ จะสามารถชนกันได้จริง ๆ และระบบชนก็ต้องใช้พลังงาน -ups ไม้พายเป็นต้นและอื่น ๆ ) ฉันเห็นว่าระบบองค์ประกอบของเอนทิตีเป็นสิ่งที่ดีเพราะมีความยืดหยุ่นและคุณไม่มีปัญหาเกี่ยวกับการสืบทอด แต่ตอนนี้ฉันติดอยู่ทั้งหมด …

3
สถาปัตยกรรมเกมเพียร์ทูเพียร์ที่ดีที่สุด
พิจารณาการตั้งค่าที่ไคลเอนต์เกม: มีทรัพยากรคอมพิวเตอร์ขนาดเล็ก (อุปกรณ์มือถือสมาร์ทโฟน) เชื่อมต่อกับเราเตอร์ทั่วไป (LAN, ฮอตสปอตและอื่น ๆ ) ผู้ใช้ต้องการเล่นเกมแบบผู้เล่นหลายคนโดยไม่มีเซิร์ฟเวอร์ภายนอก ทางออกหนึ่งคือการโฮสต์เซิร์ฟเวอร์ที่เชื่อถือได้ในโทรศัพท์เครื่องหนึ่งซึ่งในกรณีนี้จะเป็นลูกค้าเช่นกัน เมื่อพิจารณาถึงจุดที่ 1 โซลูชันนี้ไม่เป็นที่ยอมรับเนื่องจากทรัพยากรการประมวลผลของโทรศัพท์ไม่เพียงพอ ดังนั้นฉันต้องการออกแบบสถาปัตยกรรมแบบเพียร์ทูเพียร์ที่จะกระจายการจำลองเกมในหมู่ลูกค้า เนื่องจากจุดที่ 2 ระบบไม่จำเป็นต้องมีความซับซ้อนเนื่องจากการปรับให้เหมาะสม เวลาแฝงจะต่ำมาก ลูกค้าแต่ละรายสามารถเป็นแหล่งข้อมูลที่เชื่อถือได้เกี่ยวกับตัวเขาและสภาพแวดล้อมในทันที (ตัวอย่างเช่นหัวข้อย่อย) อะไรจะเป็นวิธีที่ดีที่สุดในการออกแบบสถาปัตยกรรมเช่นนี้? มีตัวอย่างที่รู้จักของโปรโตคอล LAN แบบ peer-to-peer ดังกล่าวหรือไม่? หมายเหตุ: ปัญหาบางอย่างได้รับการแก้ไขที่นี่แต่แนวคิดที่ระบุไว้มีระดับสูงเกินไปสำหรับฉัน ความปลอดภัย ฉันรู้ว่าไม่มีเซิร์ฟเวอร์ที่มีสิทธิ์หนึ่งเดียวเป็นปัญหาด้านความปลอดภัย แต่มันไม่เกี่ยวข้องในกรณีนี้เนื่องจากฉันยินดีที่จะเชื่อถือลูกค้า แก้ไข: ฉันลืมที่จะพูดถึง: มันจะเป็นเกมที่ค่อนข้างเร็ว (นักกีฬา) นอกจากนี้ฉันได้อ่านเกี่ยวกับสถาปัตยกรรมเครือข่ายที่Gaffer on Gamesแล้ว

2
กลยุทธ์สำหรับการย้ายตรรกะการเรนเดอร์ออกจากคลาส GameObject
เมื่อสร้างเกมคุณมักจะสร้างวัตถุเกมต่อไปนี้ซึ่งหน่วยงานทั้งหมดได้รับมา: public class GameObject{ abstract void Update(...); abstract void Draw(...); } ดังนั้นในการอัพเดทลูปคุณวนซ้ำทุกออบเจ็กต์เกมและให้โอกาสพวกเขาเปลี่ยนสถานะจากนั้นในการวาดลูปถัดไปให้คุณวนซ้ำอีกครั้งกับออบเจ็กต์เกมทั้งหมดและให้โอกาสพวกเขาวาดตัวเอง แม้ว่าวิธีนี้จะทำงานได้ค่อนข้างดีในเกมง่ายๆที่มีตัวเรนเดอร์แบบง่ายมันมักจะนำไปสู่วัตถุเกมขนาดยักษ์สองสามตัวที่จำเป็นต้องจัดเก็บแบบจำลองพื้นผิวที่หลากหลายและแย่ที่สุดของวิธีการวาดไขมันทั้งหมด กลยุทธ์การเรนเดอร์ปัจจุบันและคลาสการเรนเดอร์ใด ๆ ที่เกี่ยวข้อง ถ้าฉันจะเปลี่ยนกลยุทธ์การเรนเดอร์จากไปข้างหน้าเป็นการเลื่อนออกไปฉันจะต้องอัปเดตออบเจกต์เกมจำนวนมาก และวัตถุเกมที่ฉันทำไม่สามารถนำกลับมาใช้ใหม่ได้อย่างที่ควรจะเป็น แน่นอนว่าการสืบทอดและ / หรือการแต่งเพลงสามารถช่วยฉันต่อสู้กับการทำสำเนารหัสและทำให้มันง่ายขึ้นเล็กน้อยในการเปลี่ยนการใช้งาน แต่ก็ยังรู้สึกขาด วิธีที่ดีกว่าอาจจะเป็นการลบวิธีการดึงออกจากคลาส GameObject ทั้งหมดและสร้างคลาส Renderer GameObject ยังคงต้องมีข้อมูลบางอย่างเกี่ยวกับการมองเห็นของมันเช่นสิ่งที่รูปแบบที่จะเป็นตัวแทนด้วยและสิ่งที่ควรจะทาสีพื้นผิวในรูปแบบ แต่วิธีการทำจะถูกปล่อยให้แสดง อย่างไรก็ตามมีกรณีชายแดนจำนวนมากในการเรนเดอร์ดังนั้นแม้ว่านี่จะเป็นการลบการเชื่อมต่ออย่างแน่นหนาจาก GameObject ไปยัง Renderer Renderer จะยังคงต้องรู้เกี่ยวกับวัตถุทั้งหมดของเกมซึ่งจะทำให้อ้วนทุกคนรู้และ แน่นคู่ สิ่งนี้จะละเมิดแนวปฏิบัติที่ดีไม่กี่อย่าง บางที Data-Oriented-Design อาจทำเรื่องหลอกลวงได้ วัตถุในเกมจะเป็นข้อมูลแน่นอน แต่ตัวแสดงผลจะได้รับแรงผลักดันจากสิ่งนี้อย่างไร ฉันไม่แน่ใจ. ดังนั้นฉันจึงสูญเสียและไม่สามารถคิดทางออกที่ดีได้ ฉันพยายามใช้หลักการของ MVC และในอดีตฉันมีความคิดบางอย่างเกี่ยวกับวิธีการใช้สิ่งนั้นในเกม แต่เมื่อเร็ว ๆ นี้ดูเหมือนจะไม่เหมาะสมเท่าที่ฉันคิด …

1
ทางออกที่มีประสิทธิภาพสำหรับการแบ่งพื้นที่หลายคน?
คำถามนี้ค่อนข้างยุ่งยาก แต่ฉันจะพยายามทำให้ชัดเจน ช่วยบอกว่าฉันกำลังสร้างเกมออนไลน์ (ไม่ใช่ MMO-scale) แต่นั่นก็รองรับผู้เล่นให้มากที่สุดเท่าที่จะทำได้ในแนวทางเซิร์ฟเวอร์ที่เชื่อถือได้ ผมต้องการที่ยิ่งใหญ่ของโลกที่มีจำนวนมากของศัตรู AI จำลอง ฉันรับทราบถึงกลยุทธ์สองสามประการในการประหยัด CPU ของเซิร์ฟเวอร์โดยแบ่งย่อยพื้นที่และไม่ประมวลผลสิ่งที่ไม่ต้องการการประมวลผล ฉันแบ่งโลกแล้วตามภูมิภาคซึ่งจะต้องใช้เวลาโหลดและการเปลี่ยนภาพเล็กน้อยซึ่งฉันคิดว่าเป็นสิ่งสำคัญในการรักษาคุณภาพของการเล่นเกมเมื่อเล่นในพื้นที่ ฉันไม่ได้คาดหวังว่าผู้เล่นจะอยู่ในมากกว่าหนึ่งหรือสองภูมิภาค ปัญหาคือภูมิภาคสามารถมีขนาดใหญ่และมี NPC จำนวนมากในเวลาเดียวกัน ฉันจะจัดการสิ่งนี้โดยไม่กระทบต่อประสบการณ์ของผู้เล่นได้อย่างไร วิธีการเช่นเซิร์ฟเวอร์เดียวต่อภูมิภาคและเหมือนกันไม่ได้อยู่ในตาราง ฉันส่วนใหญ่กำลังมองหาโครงสร้างข้อมูลเพื่อเก็บพยุหะศัตรูและแม้แต่ NPC ที่สงบสุข ในการสรุปคำถามโปรดทราบว่ามียานพาหนะอยู่ดังนั้นจึงรวดเร็วในการเดินทางภายในภูมิภาคซึ่งมีอิทธิพลต่อ "เมื่อ" ถึงการเลือกพื้นที่

3
เป็นวิธีที่ดีในการเล่นเสียงเมื่อเกิดอะไรขึ้น? เสียงนี้เป็นอย่างไร
ดังนั้นฉันจึงคิดว่าชั้นหินใหญ่ของฉันจะมีเวลามากแค่ไหน ตัวอย่างเช่นในวิธีการCharacterของชั้นเรียนJumpหนึ่งอาจมีการอ้างอิงไปยังวัตถุที่มีผลกระทบเสียงและเล่นที่ โดยตัวมันเองนั้นดี แต่เมื่อคำนึงถึงฟิสิกส์การเคลื่อนไหวการชน ฯลฯ วิธีการกระโดดนั้นมีขนาดใหญ่มากและCharacterชั้นเรียนมีการพึ่งพาสิ่งต่างๆมากมาย ถึงกระนั้นนี่อาจจะใช้ได้ อย่างไรก็ตามถ้าหากเราไม่ต้องการให้เสียงเล่นอีกต่อไปเมื่อตัวละครกระโดด ตอนนี้เราต้องค้นหาบรรทัดของรหัสที่ระบุในระเบียบที่ยุ่งเหยิงของJumpรหัสและแสดงความคิดเห็นหรืออะไรก็ตาม ดังนั้น .. ฉันกำลังคิด .. จะเกิดอะไรขึ้นถ้ามีAudioSystemคลาสบางประเภทและทั้งหมดนี้คือการสมัครรับกิจกรรมแบบสุ่มที่สนใจในคลาสอื่น ๆ ตัวอย่างเช่นCharacterคลาสอาจมีJumpedเหตุการณ์ (คงที่ด้วยฉันคิดว่า) ที่ยกขึ้นภายในCharacterชั้นเรียนในวิธีการ จากนั้นCharacterชั้นเรียนก็จะไม่รู้อะไรเกี่ยวกับเอฟเฟกต์เสียงเล็กน้อยที่เล่นเมื่อตัวละครกระโดด AudioSystemก็จะเป็นชั้นขนาดใหญ่ที่โปรแกรมเมอร์ที่จะล่าถอยไปที่จะขอขึ้นผลกระทบเสียงกับเหตุการณ์บางอย่างที่เกิดขึ้นในเกมที่ผ่านการใช้เหตุการณ์ที่เกิดขึ้นคง แล้วถ้ามันมีขนาดใหญ่เกินไปก็อาจจะแยกออกจากกันใน subclasses เช่นEffectsAudioSystem, BackgroundAudioSystem, AmbientAudioSystemและอื่น ๆ จากนั้นในตัวเลือกสำหรับเกมหนึ่งสามารถมีช่องทำเครื่องหมายเพื่อเปิดใช้งานหรือปิดการใช้งานเสียงเหล่านี้และสิ่งที่จะต้องทำคือการปิดการใช้งานระบบที่มีธงบูลีนที่เรียบง่ายและเดียว ความคิดเกี่ยวกับระบบนี้สามารถขยายไปสู่สิ่งต่าง ๆ เช่นฟิสิกส์ภาพเคลื่อนไหวและอื่น ๆ จนถึงจุดที่เกมส่วนใหญ่ตอบสนองจากการกระทำของผู้เล่นถูกเชื่อมโยงผ่านระบบที่ซับซ้อนและแยกชิ้นส่วนเหล่านี้ ตกลงดังนั้นคำถามของฉันอาจคลุมเครือเล็กน้อย แต่สิ่งที่เสียงแบบนี้? ฉันไม่เคยได้ยินเกี่ยวกับระบบแบบนี้มาก่อนเลย ทั้งหมดนี้อยู่ในหัวของฉันตอนนี้โดยไม่ต้องมีการเข้ารหัสใด ๆ ดังนั้นบางทีมันอาจเป็นหนึ่งใน "ข้อตกลงที่ดีในทางทฤษฎี แต่ไม่ใช่ในทางปฏิบัติ" ระบบประเภทนี้จะทำงานกับเกมที่มีขนาดใหญ่กว่าหรือในที่สุดมันจะพังและกลายเป็นระเบียบมากกว่าเดิม
10 c#  architecture  sound 

3
บ่อยครั้งในการอัพเดทไคลเอนต์เกมเกี่ยวกับโลก
ใช้socket.ioฉันมีการสื่อสารคล้ายกับ MMORPG อื่น ๆ ซึ่งเป็นการเชื่อมต่อที่มั่นคงกับข้อความ ในการออกแบบของฉันจนถึงตอนนี้ไคลเอนต์ส่งตำแหน่งของผู้เล่นและเฟรมภาพเคลื่อนไหวพร้อมเฟรมอัปเดตทุกเฟรม เมื่อเซิร์ฟเวอร์ได้รับข้อความนั้นมันจะส่งสัญญาณไปยังลูกค้าทั้งหมดซึ่งจะย้ายกราฟิกตามนั้น เป็นความคิดที่ดีกว่าหรือไม่ที่จะ 'รวบรวม' สิ่งเหล่านี้และออกอากาศพวกเขาพูดครั้งเดียวใน 1/10 ของวินาที? นอกจากนี้ลูกค้าควรส่งข้อความที่แตกต่างกันจำนวนมาก (ได้รับประสบการณ์คลิกที่รายการ) ทันทีที่เกิดขึ้นหรือแทนที่จะรวบรวมเพียงครั้งเดียว ครั้งแรกจะดำเนินการได้ง่ายขึ้น

2
ความแตกต่างระหว่าง XNA Game Services และตัวแปรทั่วโลกที่ได้รับเกียรติคืออะไร?
Microsoft.Xna.Framework.Gameชั้นมีบริการสถานที่ให้บริการที่ช่วยให้โปรแกรมเมอร์ที่จะเพิ่มบริการให้กับเกมของพวกเขาโดยการให้ประเภทของชั้นเรียนและเป็นตัวอย่างของชั้นเรียนเพื่อเพิ่มวิธีการ ตอนนี้แทนที่จะต้องส่งผ่านAudioComponentไปยังคลาสและวิธีการทั้งหมดที่ต้องการแทนคุณเพียงแค่ส่งGameอินสแตนซ์ของคุณและค้นหาบริการ (ตัวระบุบริการ ) ตอนนี้เนื่องจากเกมมีบริการมากมาย (GraphicsDevice, SceneGraph, AudioComponent, EffectsManager และอื่น ๆ ) คุณจะต้องผ่านเกมไปทุกอย่าง เหตุใดจึงไม่เพียงทำให้อินสแตนซ์เหล่านี้เป็นซิงเกิลล่ะ ดีเพราะ Singletons ไม่ดีเพราะพวกเขามีสถานะทั่วโลกป้องกันการทดสอบและทำให้การออกแบบของคุณเปราะมากขึ้น ตัวระบุตำแหน่งการบริการนั้นได้รับการพิจารณาอย่างเท่าเทียมกันว่าเป็นรูปแบบการต่อต้านต่อคนจำนวนมากเพราะแทนที่จะผ่านการพึ่งพาวัตถุคุณเพียงผ่านตัวระบุตำแหน่งของบริการ (เกม) ซึ่งเป็นคู่รักที่มาพร้อมกับบริการที่เหลือ เหตุใดจึงแนะนำบริการใน XNA และการพัฒนาเกม เป็นเพราะเกมแตกต่างจากโปรแกรมปกติและมีการผสมผสานอย่างมากกับส่วนประกอบและต้องผ่านทุกองค์ประกอบที่จำเป็นสำหรับการทำงานของคลาสจะยุ่งยากมาก? บริการเกมนั้นเป็นสิ่งชั่วร้ายที่จำเป็นในการออกแบบเกมหรือไม่? มีทางเลือกอื่นที่ไม่เกี่ยวข้องกับรายการพารามิเตอร์ที่มีความยาวและการมีเพศสัมพันธ์หรือไม่?
10 xna  c#  architecture 

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

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

5
วิธีจัดการกับ netcode
ฉันสนใจที่จะประเมินวิธีต่างๆที่ netcode สามารถ "เชื่อมต่อ" เอ็นจิ้นเกม ตอนนี้ฉันกำลังออกแบบเกมที่มีผู้เล่นหลายคนและจนถึงตอนนี้ฉันได้ตัดสินใจแล้วว่าฉันต้องการ (อย่างน้อยที่สุด) ที่มีเธรดแยกต่างหากเพื่อจัดการซ็อกเก็ตเครือข่ายซึ่งแตกต่างจากส่วนอื่น ๆ ของเครื่องยนต์ที่จัดการห่วงกราฟิกและสคริปต์ ฉันมีวิธีที่เป็นไปได้วิธีหนึ่งในการสร้างเกมเครือข่ายแบบเธรดเดียวทั้งหมดซึ่งต้องตรวจสอบเครือข่ายหลังจากแสดงแต่ละเฟรมโดยใช้ซ็อกเก็ตที่ไม่ปิดกั้น อย่างไรก็ตามสิ่งนี้ไม่เหมาะสมอย่างชัดเจนเพราะเวลาที่ใช้ในการเรนเดอร์เฟรมจะถูกเพิ่มเข้ากับความล่าช้าของเครือข่าย: ข้อความที่มาถึงผ่านเครือข่ายจะต้องรอจนกว่าการเรนเดอร์เฟรมปัจจุบัน แต่อย่างน้อยวิธีการเล่นเกมนี้จะยังคงราบรื่นไม่มากก็น้อย การมีเธรดแยกต่างหากสำหรับการเชื่อมต่อเครือข่ายช่วยให้เกมสามารถตอบสนองต่อเครือข่ายได้อย่างสมบูรณ์ตัวอย่างเช่นมันสามารถส่งแพ็กเก็ต ACK กลับทันทีเมื่อได้รับการอัพเดตสถานะจากเซิร์ฟเวอร์ แต่ฉันสับสนเล็กน้อยเกี่ยวกับวิธีที่ดีที่สุดในการสื่อสารระหว่างรหัสเกมและรหัสเครือข่าย เธรดเครือข่ายจะผลักแพ็คเก็ตที่ได้รับไปยังคิวและเธรดเกมจะอ่านจากคิวในเวลาที่เหมาะสมระหว่างการวนรอบของมันดังนั้นเราจึงไม่ได้กำจัดความล่าช้าแบบ up-to-one-frame นี้ นอกจากนี้ดูเหมือนว่าฉันต้องการให้เธรดที่จัดการการส่งแพ็กเก็ตแยกจากที่กำลังตรวจสอบแพ็กเก็ตที่ลงมาในท่อเพราะมันจะไม่สามารถส่งออกได้ในขณะที่มันอยู่ตรงกลาง ตรวจสอบว่ามีข้อความเข้ามาหรือไม่ ฉันกำลังคิดเกี่ยวกับการทำงานของselectหรือคล้ายกัน ฉันเดาคำถามของฉันคืออะไรวิธีที่ดีที่สุดในการออกแบบเกมสำหรับการตอบสนองเครือข่ายที่ดีที่สุด? เห็นได้ชัดว่าลูกค้าควรส่งข้อมูลผู้ใช้โดยเร็วที่สุดเท่าที่จะทำได้ไปยังเซิร์ฟเวอร์ดังนั้นฉันจึงอาจมีรหัสส่งสุทธิมาทันทีหลังจากวนรอบการประมวลผลเหตุการณ์ทั้งภายในวงเกม สิ่งนี้สมเหตุสมผลหรือไม่?

6
มันเป็นความคิดที่ดีที่จะมี Game1 แบบคงที่ใน XNA หรือไม่?
เป็นความคิดที่ดีจริงๆหรือที่จะให้Game1ชั้นเรียนของฉันคงที่? ในขณะที่ในGame1ชั้นเรียนของฉันฉันมีชั้นเรียนที่เรียกว่าTileHandlerซึ่งจัดการทุกอย่างที่จะทำกับชุดกระเบื้องปัจจุบันของฉันและAnimalHandlerที่จัดการสัตว์ทั้งหมดของฉัน (น่าแปลกใจ) ตอนนี้ถ้าฉันอยู่ในAnimalHandlerและต้องการตรวจสอบว่ากระเบื้องนั้นสามารถเดินได้จากTileHandlerนั้นเป็นปัญหาหรือฉันต้องส่งรายการของกระเบื้องที่เดินได้AnimalHandlerซึ่งฉันไม่อยากทำ อะไรจะง่ายขึ้นจะทำให้Game1คงที่และแล้วก็ไปAnimalHandlerGame1._tileHandler.WalkableTile(position) ตอนนี้ฉันไม่เห็นอะไรผิดปกติกับสิ่งนี้หรือสิ่งใดก็ตามที่ทำให้เกิดปัญหา แต่ฉันเพิ่งเริ่มใช้คลาสคงที่ดังนั้นทุกคนที่มีความรู้จะเห็นเหตุผลใหญ่ ๆ ว่าทำไมจึงเป็นความคิดที่ไม่ดี
10 xna  c#  architecture 

3
การใช้ระบบจับคู่และชุมชนสำหรับเกมที่มีผู้เล่นหลายคน [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน2 ปีที่ผ่านมา วันนี้เกมมักจะมีพอร์ทัลผู้เล่นหลายคนพร้อมช่องแชทและระบบการจับคู่สำหรับแง่มุมของผู้เล่นหลายคนของเกม ตัวอย่างเช่น battle.net, เวทย์มนตร์ในห้องสนทนาออนไลน์, รัศมีและอื่น ๆ ตอนนี้สำหรับพวกเราที่เป็นนักเล่นเกมอินดี้ที่อาจจะไม่สามารถใช้ความพยายามในการพัฒนามากขึ้นในการสร้างแบ็คเอนด์เหล่านั้นตั้งแต่เริ่มต้นเรามีตัวเลือกอะไรบ้าง? ฉันคิดถึงบางอย่างตามแนวการใช้ IRC เป็นกระดูกสันหลังของระบบ จากนั้นใช้ส่วน "ชุมชน" ติดตามผู้เล่นติดตามเกมและจับคู่ด้านบนของที่ ดูเหมือนจะเป็นสิ่งที่ battle.net เก่า (ยุคสงครามพ่อแม่) เคยเป็น คำถามคือทำง่ายไหม? ต้องใช้อะไรในการเรียกใช้เซิร์ฟเวอร์ irc และฉันคิดว่าสิ่งนี้จำเป็นต้องมีการเขียนไคลเอนต์ IRC ด้วย (ซึ่งดูเหมือนว่าจะเสร็จสิ้นไปมากในวันนี้?) หากมีวิธีอื่นเช่นกัน (พูดว่าเป็นกรอบการทำงานที่เปิดกว้างสำหรับสิ่งนี้) เรามาฟังกันด้วย

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