การใช้งานแบบผู้เล่นหลายคนฉันสามารถนำมาใช้ในภายหลังได้หรือไม่หากฉันเลือก


15

ฉันวางแผนที่จะใช้ XNA เพื่อสร้างโครงการเกม ฉันไม่แน่ใจทั้งหมดในตอนนี้ถ้าฉันต้องการเพิ่มฟังก์ชั่นผู้เล่นหลายคนหรือไม่ฉันมีปัญหาอื่น ๆ อีกมากมายที่จะแก้ปัญหาที่ยังใหม่อยู่ ฉันไม่ต้องการให้โครงการหลุดมือไป

คำถามของฉันคือถ้าฉันมุ่งหน้าไปยังโครงการของฉันโดยไม่มีแผนที่จะเพิ่มการสนับสนุนผู้เล่นหลายคนมันเป็นเรื่องง่ายที่จะย้อนกลับ (ปกติไม่ใช่) และเพิ่มรหัสที่จำเป็นในการจับภาพเกมแบบผู้เล่นหลายคน?

คำตอบ:


24

นี่คือคำแนะนำเสียงที่นำมาจากคู่มือไลบรารีเครือข่าย Zoidcom :

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

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

ซึ่งหมายความว่าแม้ในเกมเล่นคนเดียวมีเซิร์ฟเวอร์ที่มองไม่เห็นที่ทำงานในพื้นหลัง เกมรุ่นเดียวกันที่มีผู้เล่นหลายคนเพียงแค่ต้องเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลแทนที่จะเป็นเกมเดียวในท้องถิ่นและ voila ซึ่งทำหลายผู้เล่น ข้อดีของการนี้คือ:

ไม่มีรหัสแยกสำหรับเดี่ยวและผู้เล่นหลายคนที่มีการทดสอบและพัฒนารหัสเครือข่ายในระหว่างการล้างรหัสโครงการทั้งหมด

โครงการที่ใช้รูปแบบนี้เป็นเกมเกือบทั้งหมดที่ใช้เอ็นจิ้น Quake, Civilization 4, Neverwinter Nights และอีกมากมาย

สำหรับการเชื่อมต่อไคลเอนต์และเซิร์ฟเวอร์ในกระบวนการเดียวกันโดยไม่มีค่าแฝงศูนย์สามารถใช้ซ็อกเก็ตในเครื่องได้ เหล่านี้จัดทำโดย Zoidcom และส่งแพ็กเก็ตโดยตรงจาก ZCom_Control หนึ่งไปยังอีกโดยไม่ต้องผ่านซ็อกเก็ตระดับระบบปฏิบัติการ


ดูเหมือนว่านี่เป็นการตั้งค่าสำหรับเซิร์ฟเวอร์ที่ฉันเกลียด ถ้า ping ของคุณไปยังเซิร์ฟเวอร์ต่ำแสดงว่าใช้ได้ แต่เมื่อ ping สูงเกินไปการกระทำบนหน้าจอของคุณจะล่าช้า ฉันชอบวิธีที่เอ็นจิ้นต้นทางใช้ไคลเอ็นต์เรียกใช้ฟิสิกส์และสิ่งต่าง ๆ ในพื้นที่และการดำเนินการใด ๆ ปรากฏขึ้นทันที แต่เซิร์ฟเวอร์ยังตรวจสอบเพื่อให้แน่ใจว่าผู้คนไม่แฮ็คและหากมีความไม่สอดคล้องกันในสิ่งที่ควรเกิดขึ้น เซิร์ฟเวอร์ส่งสถานะที่ถูกต้องไปยังผู้เล่นและแทนที่ลูกค้าที่จำลองด้วยข้อมูลใหม่
AttackHobo

8
@AttackingHobo: คุณแค่อธิบายการทำนายของลูกค้า คุณสามารถมีการทำนายลูกค้าและสิทธิ์เซิร์ฟเวอร์ด้วยกันได้ดีและไม่ได้ขัดขวางสถาปัตยกรรมที่อธิบายไว้ในคู่มือ Zoidcom เลย

@AttackingHobo @Joe: และ Zoidcom สนับสนุนการทำนายฝั่งไคลเอ็นต์จริงๆ ^^
Leftium

2

ฉันเห็นด้วยกับคำแนะนำที่ยกมาในคำตอบของ Leftium; ออกแบบสำหรับระบบเครือข่ายตั้งแต่เริ่มต้นเพราะคุณจะไม่สามารถเพิ่มได้ในภายหลัง

ครั้งแรกที่ฉันพยายามสร้างเกมที่มีผู้เล่นหลายคน (ฉันไม่ได้ลองเล่นเกมผู้เล่นคนเดียว!) ฉันคิดว่าฉันจะทำให้เกมทำงานได้ก่อนจากนั้นจึงเพิ่มเครือข่าย ความคิดที่ไม่ดี ฉันถูกทิ้งให้อยู่กับต้นแบบของเกมผู้เล่นเดี่ยวที่น่าเบื่อจริงๆและไม่มีเงื่อนงำว่าจะแปลงเป็นเกมที่มีผู้เล่นหลายคนได้อย่างไร ฉันทิ้งมันทั้งหมดและเริ่มใหม่คราวนี้เขียนรหัสเครือข่ายผู้เล่นหลายคนตั้งแต่เริ่มต้น ทุกอย่างถูกคลิก

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

ฉันคิดว่ามีพื้นกลาง (แม้ว่าฉันไม่เคยลอง) คุณสามารถเขียนคลาสหุ่นจำลองเพื่อใช้งานระบบเครือข่าย / คุณสมบัติผู้เล่นหลายคนและขยันในการใช้พวกเขาขณะที่คุณกำลังเขียนเกมผู้เล่นคนเดียว จากนั้นในภายหลังหากคุณตัดสินใจที่จะใช้ผู้เล่นหลายคนเพียงแค่กรอกข้อมูลในคลาสหุ่นจำลอง วิธีนี้ใช้วิธีเซิร์ฟเวอร์ / ไคลเอนต์อย่างมาก แต่คุณอาจสามารถหนีได้ด้วยการทำงานน้อยลง ท้ายที่สุดแล้วเกมผู้เล่นคนเดียวจะทำให้ง่ายกว่าเกมที่มีผู้เล่นหลายคนดังนั้นหากคุณจะเขียนเกมผู้เล่นเดี่ยวของคุณเหมือนเกมที่มีผู้เล่นหลายคนแล้วทำไมไม่ลองเล่นหลายคนล่ะ

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