มีส่วนร่วมในการสร้างเกม platformer แบบผู้เล่นหลายคนตามเวลาจริงอย่างไร


13

ฉันกำลังสร้างเกม platformer ที่มีคุณสมบัติ "ร่วมมือ" ซึ่งฉันต้องการทำงานผ่านเครือข่าย / อินเทอร์เน็ต

ตอนนี้ฉันได้อ่านเกี่ยวกับการเขียนโปรแกรมเกมบนเครือข่ายรวมถึงบทความอย่างที่โปรแกรมเมอร์ทุกคนต้องการทราบเกี่ยวกับการสร้างเครือข่ายเกมและดังนั้นฉันจึงเข้าใจความแตกต่างระหว่างเทคนิคต่าง ๆ เช่นการล็อก Peer-to-Peer และสถาปัตยกรรมทำนายเซิร์ฟเวอร์

  • ฉันได้ข้อสรุปว่าสำหรับเกมเรียลไทม์ใด ๆ ที่กำลังจะเล่นผ่านอินเทอร์เน็ต Peer-to-Peer lockstep ไม่ได้เป็นตัวเลือก
  • ฉันยังกังวลว่าสำหรับสถาปัตยกรรมแพลตฟอร์มไคลเอนต์เซิร์ฟเวอร์แบบง่าย (โดยไม่ต้องคาดเดาลูกค้า) จะส่งผลให้เกมเพลย์เสื่อมสภาพเนื่องจากความล่าช้าระหว่างการกระทำและปฏิกิริยาที่เกิดจากการไปกลับไปยังเซิร์ฟเวอร์ (ต้องบอกว่าฉันต้องการขจัดความต้องการเซิร์ฟเวอร์กลางและมีเพียงหนึ่งผู้เล่นเท่านั้นที่ลูกค้าจะได้สัมผัสกับความล่าช้านี้)

สิ่งนี้ทำให้การคาดการณ์ของลูกค้า แต่สำหรับเกมง่ายๆเช่น platformer มันยังฟังดูค่อนข้างซับซ้อน

ฉันจะไปเกี่ยวกับการสร้างระบบคาดการณ์ลูกค้าทำงานสำหรับเกม platformer ที่มีผู้เล่นหลายคนได้อย่างไร


1
สิ่งหนึ่งที่คุณจะมีความกังวลน้อยกว่าในเกมสหกรณ์คือการโกง;)
Jonathan Connell

ฉันตั้งค่าสถานะนี้ว่าไม่สร้างสรรค์ คำถามที่ถูกวาง ("มันทำงานได้ดีแค่ไหนในการเขียนเกมบนเครือข่ายที่ทำนายลูกค้าได้หรือไม่ฉันจะจบลงด้วยครึ่งหนึ่งของรหัสฐานข้อมูลของฉันซึ่งประกอบด้วยรหัสเครือข่ายหรือไม่") นั้นกว้างเกินไปและไม่ใช่ปัญหาเฉพาะเลย คำตอบก็คือ "ขึ้นอยู่กับ" ซึ่งไม่ใช่คำตอบที่ดี
TravisG

-1, "ทำงานเท่าไหร่" เป็นเรื่องส่วนตัว
Tetrad

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

@ Tetrad ขออภัย - ฉันพยายามอย่างหนักที่จะทำให้คำถามนี้เป็นไปได้ตามวัตถุประสงค์ แต่คำถามของฉันก็ลดลงเหลือ "มันยากไหมที่จะสร้างระบบการทำนายลูกค้าที่ใช้งานได้สำหรับเกมประเภท Y" - ถ้าไม่ใช่ฉันจะเรียนรู้ด้วยตัวเอง ไป แต่เวลาของฉันมี จำกัด ดังนั้นการเรียนรู้ที่ทำงานมากเกินไปหลังจาก X วันที่เล่นช้าเกินไป ฉันพยายามและให้รายละเอียดเพิ่มเติมเกี่ยวกับ Y แต่ฉันไม่ต้องการตั้งคำถามว่า "แปลเป็นภาษาท้องถิ่นมากเกินไป" ปัญหาหลักที่นี่คือการเคลื่อนไหวซึ่งเป็นเรื่องธรรมดาสำหรับ platformers ทั้งหมด (ฉันต้องการให้คนอื่นเห็นว่าคำถามนี้มีประโยชน์) หากฉันสามารถปรับปรุงคำถามนี้ได้คำแนะนำจะได้รับการชื่นชม
Justin

คำตอบ:


5

ฉันไม่คิดว่าครึ่งหนึ่งของฐานรหัสของคุณจะเปลี่ยนเป็นรหัสเครือข่ายหากคุณตัดสินใจที่จะใช้คุณสมบัติเช่นนี้

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

บนไคลเอนต์คุณใช้สิ่งนี้ไม่แตกต่างจากถ้าคุณทำเกม co-op สำหรับผู้เล่นสองคนในพื้นที่ยกเว้นคุณอ่าน P1 จากแป้นพิมพ์และ P2 จากเครือข่าย

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


ซึ่งเป็นเรื่องง่ายเหมือนวิธี Client Server (ยกเว้นไคลเอนต์หนึ่งโฮสต์เซิร์ฟเวอร์ -> คุณไม่จำเป็นต้องใช้เซิร์ฟเวอร์เฉพาะ แต่คุณต้องไปกับบรรทัด UDP + NAT Punchthrough ซึ่งต้องการเซิร์ฟเวอร์ที่ถูกหักอย่างไรก็ตาม) ประการที่สองคุณเสนอวิธีการ lockstep (ขณะที่คุณกำลังพูดถึงการส่งนักเล่นเกมทั้งหมด) นี่ไม่ใช่ IMHO วิธีที่ดีที่สุดหากเกมทำงานบนอินเทอร์เน็ต (อาจผ่าน LAN) ซึ่งไคลเอนต์เซิร์ฟเวอร์นั้นง่ายกว่ามาก ที่จะใช้
Valmond

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

2

ฉันมีเกมสไตล์ mMORPG ที่มีฟังก์ชั่นครบถ้วนพร้อมการคาดเดาลูกค้า (เกมนั้นยังไม่เสร็จ แต่มันก็ 'OK') และฉันมีบางอย่างตามรหัส 40.000 บรรทัดสำหรับเซิร์ฟเวอร์และคู่สำหรับลูกค้า (เพิ่มจำนวนเดียวกันสำหรับเครื่องมือ ฯลฯ .) การทำนายอาจจะไม่เกินสองสามร้อยบรรทัด (ถ้าเป็นเช่นนั้น) และเครือข่ายทั้งหมดเป็นส่วนหนึ่งสองสามพันบรรทัด แต่ไม่เกิน 5,000 คำพูด (ขึ้นอยู่กับตำแหน่งที่คุณวาดเส้น)

คำถามคลุมเครือคำตอบคลุมเครือ ;-)


2

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

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

โปรดทราบว่าหากคุณต้องการให้คนแปลกหน้าเล่นเกมเพียร์ทูเพียร์ผ่านอินเทอร์เน็ตคุณอาจต้องมีเซิร์ฟเวอร์อย่างน้อยหนึ่งแห่งที่จัดการกับล็อบบี้ / จับคู่

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