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

คอมพิวเตอร์สองเครื่องขึ้นไปเชื่อมต่อกันผ่านการเชื่อมต่อด้วยสายเคเบิลหรือการสื่อสารไร้สายเพื่อการแลกเปลี่ยนข้อมูล

9
การเพิ่มผู้เล่นหลายคนในเกม HTML5 [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ฉันสนใจที่จะสร้างเกมที่ฉันมีประสบการณ์แบบร่วมมือในขณะนี้ แต่ฉันอยากรู้ว่าวิธีที่ดีที่สุดในการนำ HTML5 มาใช้ ฉันทำเกมก่อนที่จะใช้ซ็อกเก็ต C ตรงและยังมีห้องสมุดสุทธิสำหรับ SDL ตัวเลือกที่ดีที่สุดของฉันในการทำสิ่งนี้ในสภาพแวดล้อมแบบ Canvas คืออะไร ในปัจจุบันทั้งหมดที่ฉันสามารถทำได้คือโซลูชัน AJAX / ฐานข้อมูล (ด้วยอัตราการรีเฟรชที่สูง) หรือการนำเซิร์ฟเวอร์ PHP มาใช้เพื่อให้ช่องทางข้อมูลผ่านซ็อกเก็ต รูปแบบการเล่นโดยรวมจะเป็นเกมประเภท platformer-ish 2.5D ดังนั้นลูกค้าทั้งสองรายจะต้องได้รับการปรับปรุงอย่างต่อเนื่องกับตำแหน่งผู้เล่นตำแหน่งศัตรูตำแหน่งขีปนาวุธข้อมูลสิ่งแวดล้อม ฯลฯ

2
ฉันจะหยุดผู้เล่นจากการดริฟท์เนื่องจากการคาดการณ์อินพุตภายในเมื่อพวกเขาหยุดได้อย่างไร
ฉันกำลังทำงานกับเอ็นจิ้นเกมมัลติเพลเยอร์เซิร์ฟเวอร์ 2D (ซึ่งคุณสามารถลองได้ที่นี่ ) มันใช้ WebRTC DataChannels (การเชื่อมต่อแบบเพียร์ทูเพียร์ แต่โฮสต์เพียร์ยังคงทำหน้าที่เป็นเซิร์ฟเวอร์) ปัญหาที่ใหญ่ที่สุด (นอกเหนือจากการเชื่อมต่อ) คือการคาดการณ์อินพุตในเครื่อง เราทำตามปกติ: เมื่อกดปุ่มผู้เล่นจะย้ายทันทีบอกโฮสต์ว่ากดคีย์ใดรับข้อมูลกลับจากโฮสต์และเปรียบเทียบกับตำแหน่งทางประวัติศาสตร์ ตำแหน่งได้รับการแก้ไขเมื่อเวลาผ่านไปหากมีความแตกต่าง วิธีนี้ใช้ได้ดีกับการสูญเสียแพ็กเก็ตต่ำหรือPDVแม้ว่า ping จะสูง หากมีการสูญเสียหรือ PDV ส่วนเบี่ยงเบนอาจมีขนาดใหญ่กว่า ฉันคิดว่าเป็นเพราะถ้าแพ็กเก็ตแรกที่ระบุว่าการเปลี่ยนแปลงของอินพุทล่าช้าหรือหลุดโฮสต์จะค้นพบในภายหลังและเริ่มเปลี่ยนผู้เล่นนั้นช้ากว่าเพรดิตันของพวกเขาในพื้นที่ หากผู้เล่นเคลื่อนไหวเราจะเพิ่มจำนวนการแก้ไขที่นำไปใช้เนื่องจากมันเป็นสิ่งที่น่าสังเกตน้อยกว่า สิ่งนี้ดูเหมือนจะปกปิดช่องว่างเมื่อเริ่มเคลื่อนที่และขณะเคลื่อนที่ อย่างไรก็ตามการแก้ไขใด ๆ ที่น่าสังเกตมากขึ้นถ้าพวกเขามาหยุดทันที จากนั้นหาก PDV หรือการสูญเสียหมายความว่าโฮสต์คิดว่าพวกเขาหยุดในเวลาต่อมาโฮสต์ overshoots ส่งข้อมูลกลับบอกว่าพวกเขากำลังไปข้างหน้าเล็กน้อยและการแก้ไขทำให้ผู้เล่นดริฟท์เล็กน้อย ในการเชื่อมต่อที่ไม่สม่ำเสมอผู้เล่นมักจะล่องลอยหลังจากหยุด ฉันไม่ได้สังเกตเรื่องนี้ในเกมอื่น สิ่งนี้จะบรรเทาลงได้อย่างไร

4
ป้องกันไม่ให้ผู้เล่น wallhacking ใน FPS ออนไลน์หรือไม่
ทำไมเรายังบ่นเกี่ยวกับ wallhackers ในนักกีฬาคนแรกที่เล่นด้วยกันหลายคน? เป็นไปไม่ได้ที่จะทำการบดเคี้ยวสำหรับผู้เล่นฝั่งเซิร์ฟเวอร์ทั้งหมดหรือไม่? ตัวอย่างเช่นส่งข้อมูล xyz ของผู้เล่นไปยังลูกค้าเฉพาะเมื่อผู้เล่นสามารถมองเห็นได้ใน frustum ของลูกค้าและไม่ได้เกิดจากวัตถุใด ๆ แม้ว่าการปะทะกันของรูปทรงเรขาคณิตนั้นง่ายมาก แต่ผู้โกงเวลาส่วนใหญ่จะไม่ได้รับข้อมูลทางยุทธวิธี ทำไมไม่ทำเช่นนี้?

3
มีรูปแบบการเขียนเซิร์ฟเวอร์แบบเทิร์นเบสที่สื่อสารกับไคลเอนต์ n ผ่านซ็อกเก็ตหรือไม่?
ฉันกำลังทำงานกับเซิร์ฟเวอร์เกมทั่วไปที่จัดการเกมให้กับไคลเอนต์เครือข่ายซ็อกเก็ต TCP จำนวนหนึ่งที่เล่นเกม ฉันมี 'การออกแบบ' ที่แฮ็คพร้อมกับเทปพันสายไฟที่ใช้งานได้ แต่ดูเหมือนว่าทั้งบอบบางและไม่ยืดหยุ่น มีรูปแบบที่ดีขึ้นสำหรับวิธีการเขียนการสื่อสารลูกค้า / เซิร์ฟเวอร์ที่แข็งแกร่งและยืดหยุ่นหรือไม่? (ถ้าไม่คุณจะปรับปรุงสิ่งที่ฉันมีด้านล่างได้อย่างไร) ประมาณฉันมีสิ่งนี้: ในขณะที่ตั้งค่าเกมเซิร์ฟเวอร์จะมีหนึ่งเธรดสำหรับแต่ละซ็อกเก็ตผู้เล่นที่จัดการคำขอที่ซิงโครนัสจากไคลเอนต์และการตอบสนองจากเซิร์ฟเวอร์ อย่างไรก็ตามเมื่อเกมดำเนินไปเธรดทั้งหมดยกเว้นหนึ่งสลีปและเธรดจะวนไปตามผู้เล่นทุกคนทีละครั้งเพื่อสื่อสารเกี่ยวกับการเคลื่อนไหวของพวกเขา (ในการตอบกลับคำร้องขอ) นี่คือแผนภาพของสิ่งที่ฉันมีอยู่ในปัจจุบัน; คลิกเพื่อดู / รุ่นที่สามารถอ่านได้ที่มีขนาดใหญ่หรือ66kB รูปแบบไฟล์ PDF ปัญหา: มันต้องการให้ผู้เล่นตอบกลับอย่างแม่นยำด้วยข้อความที่ถูกต้อง (ฉันคิดว่าฉันสามารถให้ผู้เล่นแต่ละคนตอบสนองด้วยอึแบบสุ่มและย้ายต่อเมื่อพวกเขาให้การเคลื่อนไหวที่ถูกต้องแก่ฉัน) ไม่อนุญาตให้ผู้เล่นคุยกับเซิร์ฟเวอร์เว้นแต่จะเป็นตาของพวกเขา (ฉันอาจให้เซิร์ฟเวอร์ส่งการอัปเดตเกี่ยวกับผู้เล่นอื่น แต่ไม่สามารถดำเนินการตามคำขอแบบอะซิงโครนัสได้) ข้อกำหนดขั้นสุดท้าย: ประสิทธิภาพไม่สำคัญยิ่ง ส่วนใหญ่จะใช้สำหรับเกมที่ไม่ใช่เรียลไทม์และส่วนใหญ่สำหรับการเจาะ AIs ต่อกันไม่ใช่มนุษย์ที่กระตุก การเล่นเกมจะเป็นแบบเทิร์นเบสเสมอ (แม้ว่าจะมีความละเอียดสูงมาก) ผู้เล่นแต่ละคนจะได้รับการดำเนินการหนึ่งครั้งก่อนที่ผู้เล่นอื่นจะได้รับการเปิด การนำเซิร์ฟเวอร์ไปใช้จะเกิดขึ้นใน Ruby หากสร้างความแตกต่าง

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

3
เครือข่าย P2P ซ่อนตำแหน่ง?
ฉันทำงานกับสถาปัตยกรรม P2P เพื่อการเล่นเกมที่ปลอดภัยและฉันได้แบ่งปัญหาออกเป็นห้าปัญหาย่อย: การดัดแปลงสถานะของเกมที่ส่งมาอย่างผิดกฎหมาย วางขี้โกงอย่างแม่นยำ ยอมรับสถานะเกม หลีกเลี่ยงการโกง "มองไปข้างหน้า" ซ่อนข้อมูลที่ละเอียดอ่อนจากฝ่ายตรงข้าม สี่คนแรกที่ฉันได้รับการแก้ไขทั้งหมดสวยมาก แต่มันเป็นคนสุดท้ายที่ฉันมีปัญหากับ ก่อนที่ฉันจะลงรายละเอียดฉันแค่อยากถามว่ามีอะไรที่ฉันไม่ได้ทำในรายการทำเครือข่าย p2p "cheat proof" หรือไม่ ฉันไม่สนใจกลโกงเช่นการใช้ aimbots ฉันแค่สนใจที่จะทำให้เครือข่าย p2p ปลอดภัยเหมือนเซิร์ฟเวอร์ส่วนกลาง ดังนั้นในความพยายามของฉันจนถึงการซ่อนข้อมูลที่ละเอียดอ่อนฉันได้มุ่งเน้นไปที่ตำแหน่งของผู้เล่นในเกมที่ไม่ทราบตำแหน่งของฝ่ายตรงข้ามเสมอ ปัญหาก็จะกลายเป็นวิธีการตรวจสอบว่าคุณควรส่งตำแหน่งให้คู่ต่อสู้ของคุณโดยไม่ทราบตำแหน่งของฝ่ายตรงข้าม ฉันได้ตัดวิธีการเช่นฝ่ายตรงข้ามที่ส่งตำแหน่งเท็จหลายตำแหน่งเพื่อเปรียบเทียบคุณเช่นกันเนื่องจากฝ่ายตรงข้ามของคุณสามารถใช้ระบบดังกล่าวได้อย่างง่ายดายเนื่องจากเขาจะได้ตำแหน่งของคุณหากตำแหน่งเท็จปรากฏขึ้นจากตำแหน่งของคุณ วิธีที่ฉันมุ่งเน้นไปที่สิ่งที่คุณได้รับ "สนามภาพ" จากฝ่ายตรงข้ามของคุณและสามารถกำหนดได้ว่าคุณควรส่งตำแหน่งของคุณหรือไม่ อย่างไรก็ตามนี่เป็นปัญหาในเกมเช่น League of Legends ซึ่งข้อมูลการมองเห็นของฝ่ายตรงข้ามเป็นข้อมูลที่มีความอ่อนไหวสูง ฉันได้พยายามแก้ปัญหานี้โดยเปลี่ยนฟิลด์ภาพโดยใช้เมทริกซ์เอกพจน์หมายความว่าคุณไม่สามารถเปลี่ยนจาก Visual Field ที่แปลงแล้วกลับไปเป็นเวอร์ชันดั้งเดิมได้ แต่เนื่องจากเป็นการแปลงเชิงเส้นคุณจึงสามารถทราบได้ว่าตำแหน่งของคุณอยู่ภายในหรือไม่ เขตข้อมูลภาพหรือไม่ อย่างไรก็ตามนี่ไม่ได้ผลอย่างสมบูรณ์สนามภาพที่แน่นอนไม่สามารถเรียกคืนได้หลังจากการเปลี่ยนแปลง แต่ข้อมูลเกี่ยวกับ "ความลาด" ในเขตข้อมูลภาพ (เขตข้อมูลภาพถูกสร้างขึ้นโดยหลายบรรทัดและสามารถกำหนดความลาดชันของแต่ละบรรทัด) คืนค่าและสิ่งนี้สามารถใช้เพื่อสร้างฟิลด์ภาพต้นฉบับที่ค่อนข้างใหม่ ในสาระสำคัญสิ่งที่ฉันต้องการก็คือฟังก์ชั่นที่สามารถตัดสินได้ว่าตำแหน่งนั้นเป็น "ที่มองเห็นได้" หรือไม่และการสร้างฟังก์ชั่น / ฟิลด์ภาพขึ้นมาใหม่นั้นจำเป็นต้องมีการคำนวณแบบเรียกร้อง เกมในการดำเนินการ …

4
ใช้การจำลองทางฟิสิกส์บนทั้งไคลเอนต์และเซิร์ฟเวอร์หรือไม่?
ฉันใช้ดาวเคราะห์น้อยแบบผู้เล่นหลายคนเพื่อเรียนรู้เกี่ยวกับสถาปัตยกรรมเครือข่ายไคลเอ็นต์ / เซิร์ฟเวอร์ในเกม ฉันใช้เวลาในการอ่านสิ่งพิมพ์ของ GafferOnGames และ Valve บนเทคโนโลยีไคลเอ็นต์ / เซิร์ฟเวอร์ของพวกเขา ฉันมีปัญหากับสองแนวคิด ขณะนี้ฉันมีเซิร์ฟเวอร์เกมจำลองสถานการณ์จริงที่มี box2d และส่งสถานะของโลกให้กับลูกค้าประมาณ 20 ครั้งต่อวินาที ลูกค้าแต่ละรายติดตามสแน็ปช็อตสองสามครั้งสุดท้ายที่ได้รับและ lerps ระหว่างสองสถานะเพื่อให้การเคลื่อนไหวของสไปรต์ราบรื่นขึ้น อย่างไรก็ตามมันไม่ราบรื่น มันอาจจะราบรื่นสักพักหนึ่งแล้วก็กระตุกนิดหน่อยจากนั้นก็กลับมาราบรื่น ฯลฯ ฉันลองทั้ง TCP และ UDP แล้วทั้งคู่ก็เหมือนกัน ความคิดใดที่ปัญหาของฉันอาจเป็นอย่างไร (หมายเหตุ: ฉันใช้สิ่งนี้กับผู้เล่นคนแรกก่อนและการเคลื่อนไหวของสไปรต์นั้นราบรื่นที่ 60fps เมื่ออัปเดตโลกฟิสิกส์เพียง 20 ครั้งต่อวินาที) เพื่อที่จะแก้ปัญหาแรกฉันคิดว่าบางทีไคลเอนต์ควรรันการจำลอง box2d ด้วยเช่นกันและเพียงแค่อัปเดตตำแหน่งของสไปรต์เพื่อให้ตรงกับสแนปชอตของเซิร์ฟเวอร์เมื่อพวกเขาไม่ตรงกัน ฉันคิดว่านี่อาจราบรื่นกว่าเนื่องจากการใช้ผู้เล่นคนเดียวของฉันราบรื่น นี่เป็นความคิดที่ดีหรือไม่? แม้ว่ามันจะไม่สามารถแก้ไขปัญหาข้างต้นได้มันจำเป็นสำหรับการทำนายลูกค้าหรือไม่? ตัวอย่างเช่นหากผู้เล่นพยายามเคลื่อนย้ายเรือของพวกเขาพวกเขาจะรู้ได้อย่างไรว่าพวกเขายิงยานอวกาศดาวเคราะห์ผนังหรือศัตรูโดยไม่มีการจำลองทางฟิสิกส์? ดูเหมือนว่าเรือของพวกเขาจะปรากฏขึ้นเพื่อผ่านวัตถุที่มันควรจะชนกันก่อนที่พวกเขาจะได้รับสแนปชอตจากเซิร์ฟเวอร์ที่ระบุว่าพวกเขาชนกับวัตถุ ขอบคุณ!

3
Javascript และ PHP สำหรับผู้เล่นหลายคนแบบเรียลไทม์? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน2 ปีที่ผ่านมา ฉันสงสัยว่าการรวม Javascript clientside กับ PHP / mysql serverside เป็นความคิดที่ดีสำหรับเกมเบราว์เซอร์ HTML5 แบบเรียลไทม์ (ขนาดเล็ก) หรือไม่ ความรู้ด้านเทคนิคของฉันมี จำกัด มากและแม้ว่าฉันจะวางแผนที่จะเรียนรู้ node.js ในอนาคต แต่ช่วงการเรียนรู้ก็ค่อนข้างใหญ่ในตอนนี้ ตั้งแต่ฉันคุ้นเคยกับ PHP ฉันรู้สึกว่าฉันจะทำให้มันทำงานได้เร็วขึ้นมาก สเกลที่ฉันคิดคือผู้เล่น 2-8 คนในเวลานั้น และพยายามที่จะทำให้ไคลเอนต์กับเซิร์ฟเวอร์ข้อความนับเป็นต่ำที่สุด ค่าที่ฉันตั้งใจจะจัดเก็บ / จัดการคือ: ชื่อผู้เล่นและรหัส ตำแหน่ง X และ Y สุขภาพ. รายการที่ติดตั้ง (สูงสุด 8 ช่องอาจน้อยกว่า) …

3
เครือข่าย 3G กำหนด IP ให้กับสมาร์ทโฟนได้อย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน3 ปีที่ผ่านมา ฉันกำลังเล่นเกมบนเครือข่าย 3G โดยใช้ Android หรือ Iphone สมมติว่าฉันย้ายจากเซลล์หนึ่งไปอีกเซลล์หนึ่ง; ที่อยู่ IP จะเปลี่ยนแปลงหรือไม่ ถ้าใช่ฉันจะเล่นเกมต่อไปได้อย่างไรในขณะที่เปลี่ยนสถานีฐานเนื่องจากที่อยู่ IP ของฉันลงทะเบียนในเซิร์ฟเวอร์เกมแล้ว มี DHCP บางอย่างหรือไม่

1
การปรับใช้เครือข่ายให้ราบรื่น
เรากำลังทำนักกีฬาคนแรกที่ทวีคูณ ลูกค้าส่งตำแหน่งไปยังเซิร์ฟเวอร์ในอัตราคงที่ (ปัจจุบันอยู่ที่ 10Hz) เซิร์ฟเวอร์จะส่งข้อความเดียวที่เกี่ยวข้องกับตำแหน่งของผู้เล่นทุกคนในอัตราเดียวกัน (10Hz) ตามที่คาดไว้การเคลื่อนไหวค่อนข้างเร็วเนื่องจากเกม 60fps ได้รับการอัพเดทเพียง 10 ครั้งต่อวินาที วิธีที่ดีที่สุดในการทำให้การเคลื่อนไหวนี้ราบรื่นคืออะไร? วิธีที่ชัดเจนที่สุดคือการสอดแทรกระหว่างสองแพ็กเก็ตล่าสุดเพื่อให้การแก้ไขเสร็จสิ้นเมื่อเรารับแพ็กเก็ตใหม่ แต่สิ่งนี้จะเพิ่มความล่าช้า 100ms ทันทีสำหรับผู้เล่นทุกคน อีกวิธีหนึ่งคือใช้ความเร็วและความเร่งที่อนุมานจากแพ็คเก็ตสุดท้ายเพื่อทำนายว่าผู้เล่นอยู่ที่ไหนก่อนที่แพ็กเก็ตต่อไปจะมาถึงอย่างไรก็ตามหากการทำนายผิดผู้เล่นจะมีแนวโน้มที่จะกระโดดทันทีที่แพ็กเก็ตใหม่ได้รับ . ไม่มีใครรู้ว่าชื่อ AAA แก้ปัญหานี้ได้อย่างไร

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

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

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

2
วิธีจัดการการค้นหาเส้นทางและการเคลื่อนย้ายเอนทิตีในโลกเครือข่ายขนาดใหญ่
เมื่อพิจารณาจากภาพด้านบนด้วยการแบ่งกระเบื้องออกเป็นกล่องขนาด 32x32 ฉันมีเอนทิตีที่ถูกทำเครื่องหมายเป็นผู้เล่นใกล้เคียง 'aggro' ที่เข้ามาใกล้ ฉันต้องการให้สัตว์ประหลาดตัวนี้ไล่ล่าผู้เล่น (และจะไล่ล่าผู้เล่นซักพัก) ปัจจุบันการเคลื่อนไหวเพียงอย่างเดียวของฉันได้ทำ interpolator อย่างง่ายสำหรับเอนทิตีระยะไกลและสิ่งนี้ทำงานได้เนื่องจากช่องว่างระหว่างการอัพเดตการเคลื่อนไหวมีขนาดค่อนข้างเล็ก ฉันไม่สามารถบอกลูกค้าได้ว่าสัตว์ประหลาดต้องการย้ายไปยังตำแหน่งที่เขา / เธออยู่เพราะจะทำให้เอนทิตีเคลื่อนที่เร็วกว่าที่ควร (สิ่งนี้สามารถแก้ไขได้ด้วยการใช้คณิตศาสตร์สำหรับการแก้ไข - ประสิทธิภาพ) แต่ที่สำคัญกว่านั้นไม่ได้ดูสมจริงและอาจติดผนัง! ฉันไม่ต้องการจำลองการเคลื่อนไหวทั้งหมดบนเซิร์ฟเวอร์หากสามารถหลีกเลี่ยงได้ ... แม้ว่าฉันจะเดาได้ แต่ก็ยังไม่สามารถแก้ปัญหาการตัดได้ ฉันสงสัยว่าโซลูชันเกี่ยวข้องกับการค้นหาพา ธ และส่งการอัพเดตโหนดเป็นระยะของไคลเอ็นต์และให้พวกเขาจำลองการเคลื่อนไหว แต่ฉันไม่แน่ใจ ขอบคุณ!

2
มีเครื่องมือสำหรับทดสอบรหัสผู้เล่นหลายคนหรือไม่?
มีเครื่องมือที่เชื่อถือได้ที่สามารถจำลองสภาพเครือข่ายเหมือนชีวิตจริงเช่นเครือข่ายที่มีแบนด์วิดธ์ที่แตกต่างกันเวลาแฝงที่แตกต่างกันการสูญเสียตและอื่น ๆ ... ?

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