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

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

2
UDP ที่ไม่บล็อกหรือแยกเธรดสำหรับรับ
ฉันกำลังสร้างเกมผู้เล่นหลายคน (สำหรับผู้เล่นอายุต่ำกว่า 64 ปี) ฉันตัดสินใจที่จะมีเธรดแยกต่างหากสำหรับลูปเครือข่าย แต่ฉันสงสัยว่ามันจะดีกว่าถ้าจะสร้างเธรดพิเศษสำหรับรับ UDP หรือตั้งซ็อกเก็ตการรับบนการไม่บล็อก (ไม่มีเธรดพิเศษ) หรือจะเป็นการดีกว่าถ้าใช้วิธีอื่นเช่น Asynchronous Sockets ยินดีต้อนรับวิธีการที่ดีกว่าเสมอ!

1
Multiplayer platformer - ปกติแล้วการแก้ไขเซิร์ฟเวอร์จะต้องใช้กับไคลเอนต์เดียวบนเซิร์ฟเวอร์หรือไม่?
ขณะนี้ฉันกำลังทำงานบน platformer ที่มีผู้เล่นหลายคนค่อนข้างง่าย ฉันอ่านบทความเกี่ยวกับเทคนิคต่าง ๆ ที่ใช้ในการซ่อนเวลาแฝงอยู่ แต่ฉันก็ยังไม่เข้าใจแนวคิดบางอย่าง ฉันพบว่าหัวข้อน่าสนใจมากและต้องการลองใช้ความคิดด้วยตัวเอง แต่ฉันคิดว่าการขอแลกเปลี่ยน gamedev จะมีประสิทธิภาพมากขึ้นสำหรับคำถามของฉัน ฉันจะพยายามอย่างดีที่สุดเพื่ออธิบายสถานการณ์ปัจจุบันของฉันและคำถามใดที่เกิดขึ้นระหว่างทาง ตอนนี้ฉันต้องการซิงค์ผู้เล่นคนเดียวกับเซิร์ฟเวอร์เท่านั้น ในทางทฤษฎีผมสันนิษฐานว่าผู้เล่นคนเดียวที่มีการคาดการณ์ฝั่งไคลเอ็นต์จะไม่ต้องการการแก้ไขเซิร์ฟเวอร์เนื่องจากไม่มีปัจจัยภายนอกที่มีอิทธิพลต่อการเคลื่อนไหวของเขา ดังนั้นต้นแบบของฉันในปัจจุบันมีผู้เล่นเพียงคนเดียวที่ซิงค์กับเซิร์ฟเวอร์โดยไม่ต้องทำการแก้ไขเซิร์ฟเวอร์ หากคุณคุ้นเคยกับระบบเครือข่ายเกมฉันคิดว่าคุณอาจข้ามส่วนบริบทแม้ว่าฉันอาจทำสิ่งผิดปกติไปพร้อมกัน ลูปไคลเอ็นต์ (หนึ่งครั้งต่อเฟรมหนึ่งครั้งทุกๆ ~ 16.67ms) ลูปไคลเอนต์แบบง่ายดูเหมือนว่า: ตรวจสอบอินพุตภายใน (WASD) และจัดทำแพ็กเกจเป็นการกระทำ (เช่นType=MoveLeft, Time=132.0902, ID=15) เราเก็บการกระทำที่บรรจุไว้เพื่อส่งในที่สุด นอกจากนี้เรายังนำการกระทำที่ต้องการไปใช้กับการจำลองทางฟิสิกส์ของเกมโดยตรง ตัวอย่างเช่นหากเรามีการMoveLeftดำเนินการเราจะใช้กำลังไปทางซ้ายกับความเร็วของผู้เล่น ตรวจสอบเพื่อส่งการกระทำ เพื่อป้องกันการใช้แบนด์วิดท์ของลูกค้าที่ไม่เหมาะสมให้ส่งการกระทำที่ทำแพคเกจในช่วงเวลาที่แน่นอนเท่านั้น (เช่น 30ms) ใช้การแก้ไขเซิร์ฟเวอร์ ณ จุดนี้จะจัดการกับเดลต้าและการแก้ไขที่ได้รับจากเซิร์ฟเวอร์และนำไปใช้กับการจำลองสถานการณ์ของเกม สำหรับคำถามนี้ไม่ได้ใช้ อัปเดตฟิสิกส์ท้องถิ่น ใช้วงฟิสิกส์ของผู้เล่นหลัก โดยพื้นฐานแล้วสิ่งนี้จะทำการทำนายการเคลื่อนไหวของผู้เล่น สิ่งนี้เป็นการเพิ่มแรงโน้มถ่วงให้กับความเร็วของผู้เล่นใช้ความเร็วของผู้เล่นกับตำแหน่งของเขาแก้ไขการชนกันตลอดทาง ฯลฯ ฉันควรระบุว่าการจำลองทางฟิสิกส์มักจะดำเนินการด้วยเดลต้าวินาทีคงที่ (เรียกหลายครั้งขึ้นอยู่กับวินาทีเดลต้าจริง) . ฉันข้ามรายละเอียดเฉพาะบางอย่างเกี่ยวกับฟิสิกส์และส่วนอื่น ๆ เพราะฉันรู้สึกว่าพวกเขาไม่จำเป็นสำหรับคำถามนี้ แต่อย่าลังเลที่จะแจ้งให้เราทราบหากพวกเขาจะเกี่ยวข้องกับคำถาม …

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

4
ป้องกันการโกงผู้เล่นหลายคน
ฉันเกือบจะพัฒนาเกมแบบผู้เล่นหลายคนแนวอินดี้เล็กเสร็จแล้ว ในขณะที่ฉันตั้งใจจะอนุญาตให้ผู้คนโกงในผู้เล่นคนเดียวนี่ก็เห็นได้ชัดว่าไม่เป็นที่ยอมรับในผู้เล่นหลายคน ไม่มีใครรู้วิธีที่จะช่วยหยุดค่าเฉลี่ยโจจากการใช้บางอย่างเช่น Cheat-Engine ในการปรับเปลี่ยนบางส่วนของเกม? ขณะนี้ฉันวางแผนที่จะให้ลูกค้าอัปโหลดแฮช MD5 ของแต่ละไฟล์ที่เกมใช้ (เก็บไว้เป็น XML) ไปยังเซิร์ฟเวอร์เกมเพื่อตรวจสอบทุกสองสามวินาที แต่มีอะไรที่ฉันสามารถทำได้เพื่อหยุดสิ่งต่าง ๆ เช่นโปรแกรมแก้ไขหน่วยความจำ ฯลฯ ?

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

3
ความรู้เกี่ยวกับกลไกการแฮ็คจำเป็นสำหรับ MMO หรือไม่?
บอกว่าฉันกำลังวางแผนในอนาคต (ไม่ใช่ตอนนี้มีมากฉันต้องเรียนรู้ก่อน) มองการมีส่วนร่วมในโครงการกลุ่มที่จะทำให้เกมออนไลน์หลายผู้เล่นจำนวนมาก (mmo) และงานของฉันจะเป็นเครือข่าย ส่วน. ฉันไม่คุ้นเคยกับการเขียนโปรแกรมเครือข่าย (ฉันได้อ่านหนังสือพื้นฐานมากเกี่ยวกับ PHP, MySQL และฉันยุ่งกับWAMPเล็กน้อย) ในช่วงที่ฉันเรียน PHP และ MYSQL ฉันควรจะดูแฮ็คไหม การแฮ็กในการสแกนพอร์ตการแฮ็กเราเตอร์ ฯลฯ ใน MMO ผู้คนมักจะพยายามโกงบอทและสถานการณ์เช่นนี้ แต่สถานการณ์ที่เลวร้ายที่สุดคือการมีคนแฮ็คฐานข้อมูล นี่เป็นเพียงความคิดของฉันในเรื่องนี้ฉันไม่รู้จริงๆ ฉันเข้าใจเครือข่ายค่อนข้างดีเช่น subnetting / ports / IP's (local / global) / etc ในความเห็นของคุณ (ถ้าคุณเข้าใจในหัวข้อ, ให้ความรู้แก่ฉัน) ฉันควรเรียนรู้เกี่ยวกับสิ่งเหล่านี้เพื่อตอบโต้ความเป็นไปได้ของเหตุการณ์นี้หรือไม่? นอกจากนี้จากสิ่งที่ฉันพูดถึง (การสแกนพอร์ตการแฮ็คเราเตอร์) มีอะไรอีกบ้างที่เกี่ยวข้องกับการแฮ็คที่ฉันควรพิจารณา ฉันไม่คุ้นเคยกับด้านที่เป็นอันตราย / ความปลอดภัยของระบบเครือข่าย และหมายเหตุ: ฉันไม่ใช่เด็กที่พยายามเรียนรู้วิธีแฮ็ก ฉันต้องการเรียนรู้ให้มากที่สุดก่อนที่ฉันจะไปโรงเรียนและฉันจำเป็นต้องรู้จริงๆว่าฉันต้องเรียนหรือไม่

2
ฉันจำเป็นต้องใช้การสนับสนุน IPv6 สำหรับเกมของฉันหรือไม่
ฉันจะใช้คุณสมบัติเครือข่ายสำหรับเกมที่ฉันกำลังทำงานอยู่ตอนนี้ฉันสงสัยว่าถ้าฉันต้องใช้การสนับสนุน IPv6 หรือเพียงแค่มีการสนับสนุน IPv4 ก็เพียงพอแล้ว
10 networking 

1
การแลกเปลี่ยนข้อความไคลเอนต์เซิร์ฟเวอร์เซิร์ฟเวอร์และการซิงโครไนซ์นาฬิกา
ฉันกำลังทำเกมฟิสิกส์ที่รวดเร็วซึ่งเป็นตารางฮอกกี้ ด้วยค้อนสองตัวและลูกซนหนึ่งตัว เกมทำงานบน iphone / ipad และฉันกำลังเล่นเกมหลายคนผ่าน GameCenter นี่คือการทำงานของระบบเครือข่าย ลูกค้าที่เป็นดาวจับคู่จะถูกตัดสินในฐานะเซิร์ฟเวอร์และลูกค้าที่ยอมรับคำขอแข่งขันคือลูกค้า 'เซิร์ฟเวอร์' มีการทำงานของฟิสิกส์และการตอบสนองนั้นเกิดขึ้นทันทีและไคลเอนต์ก็มีการทำงานของฟิสิกส์เพื่อให้ดูราบรื่นระหว่างการแลกเปลี่ยนข้อความ สิ่งที่ฉันทำในฐานะเซิร์ฟเวอร์คือฉันส่งไปยังลูกค้าความเร็วลูกตุ้มของฉันและตำแหน่งของฉันและลูกค้าปรับความเร็ว / ตำแหน่งเด็กซนของเขาที่เกี่ยวข้องกับเซิร์ฟเวอร์เพื่อให้มันซิงค์ ไม่เช่นนั้นฟิสิกส์จะซิงโครไนซ์และมันไขสกรูขึ้น เมื่อเวลาในการตอบสนองของเครือข่ายดีผล 100 มิลลิวินาทีนั้นค่อนข้างดีฉันได้เกมที่เล่นได้อย่างราบรื่นทางฝั่งไคลเอ็นต์และพฤติกรรมแปลก ๆ นั้นน้อยที่สุด ปัญหาเกิดขึ้นเมื่อความล่าช้าอยู่ที่ประมาณ 150 ถึง 200ms ในกรณีดังกล่าวเกิดขึ้นที่ลูกค้าของฉันเด็กซนชนขอบและทิศทางกลับหัว แต่มันได้รับข้อความล่าช้าจากเซิร์ฟเวอร์และมันกลับเล็กน้อยทำให้เกิดความรู้สึกแปลก ๆ กับพฤติกรรมลูก ฉันได้อ่านบางสิ่งเกี่ยวกับเรื่องนี้: โป่งเครือข่ายตัวอย่าง คลิกตัวอย่างการซิงโครไนซ์ Wikipedia เกี่ยวกับ Clock Sync ดังนั้นฉันจะแก้ปัญหานี้อย่างไร เท่าที่ฉันได้อ่านตัวเลือกที่ดีที่สุดที่ฉันต้องทำคือการซิงโครไนซ์นาฬิกาบนเซิร์ฟเวอร์ / ไคลเอ็นต์ด้วยการประทับเวลาเพื่อที่เมื่อฉันได้รับข้อความหน่วงเวลาที่เกี่ยวข้องกับนาฬิกาของฉันฉันก็ไม่สนใจแล้วปล่อยให้ลูกค้าจำลอง งาน. พวกคุณเห็นด้วยไหม? และเนื่องจากฉันกำลังส่งข้อมูลที่ไม่น่าเชื่อถือ (UDP) ฉันอาจได้รับข้อความหรือข้อความล่าช้า หากเป็นวิธีที่ดีที่สุดฉันจะใช้การซิงโครไนซ์นาฬิกาได้อย่างไร ฉันอ่านขั้นตอนเกี่ยวกับวิธีการ แต่ฉันไม่เข้าใจมันมากนัก มันบอกว่า: ลูกค้าประทับเวลาท้องถิ่นปัจจุบันบนแพ็กเก็ต …

3
การสร้างเครือข่ายในเกมกลยุทธ์แบบเรียลไทม์
ปัจจุบันเกมการวางแผนกลยุทธ์แบบเรียลไทม์ในปัจจุบันคืออะไร? ฉันดูเหมือนจะจำได้ว่าไม่กี่ปีที่ผ่านมาบางชื่อ AAA ส่งเฉพาะอินพุตของผู้เล่น (Starcraft 1, Age of Empires) เนื่องจากสิ่งนี้ทำให้คุณต้องรักษาทุกสิ่งไว้อย่างสมบูรณ์มันจึงเป็นตัวเลือกที่เหมาะสมหรือไม่? การซิงโครไนซ์ตัวสร้างเลขสุ่มนั้นเป็นไปได้ แต่สิ่งที่เกี่ยวกับความแตกต่างเล็กน้อยในการใช้งาน FPU ฯลฯ .. หรือเกมกลยุทธ์ใช้สิ่งที่ใกล้กับเครือข่ายเกมแอ็คชั่นมากขึ้นโดยที่แต่ละเอนทิตีถูกส่งแทน (ด้วยรูปแบบการทำนายและการบีบอัด (เดลต้า)) ถ้าเป็นเช่นนั้นไอเท็มที่ระเหยได้ง่ายเช่นกระสุนปืนจะได้รับการปฏิบัติอย่างไร ไคลเอ็นต์ / เซิร์ฟเวอร์กับเพียร์ทูเพียร์คืออะไร ฉันเดาว่าทั้งหมดนี้เกี่ยวข้องกันอย่างมาก ขอขอบคุณสำหรับเวลาของคุณ!

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

6
เครือข่าย Pong Clone
ฉันมีพื้นฐานของซ็อกเก็ต TCP การสื่อสาร UDP และอื่น ๆ แต่ไม่สามารถหาวิธีใช้สิ่งเหล่านี้กับสภาพแวดล้อมเกมแบบเรียลไทม์ได้ ฉันมีโป่งโคลนที่มีผู้เล่น 4 คนและจำเป็นต้องซิงโครไนซ์ตำแหน่งการพายระหว่างไคลเอนต์ทั้งสามกับเซิร์ฟเวอร์ (เซิร์ฟเวอร์คือผู้เล่นคนที่สี่) ขณะนี้ฉันใช้ UDP เพื่อส่งการอัปเดตตามเวลาจริง (การพายเรือ) และ TCP สำหรับการตั้งค่าล็อบบี้เกมเป็นต้น เป็นสิ่งที่ดีที่จะส่งสแปมปริมาณการใช้งาน UDP จำนวนมากหรือไม่ ฉันควรตรวจสอบ DCCP เพื่อดูว่ามีความแออัดหรือไม่ หรือนี่ไม่ใช่ปัญหาของโครงการขนาดเล็กเช่นนี้ใช่หรือไม่ เมื่อใดควรทำการซิงโครไนซ์ข้อความระหว่างไคลเอนต์ / เซิร์ฟเวอร์ ปัจจุบันเซิร์ฟเวอร์กำลังทำการส่งสแปมแพ็กเก็ต UDP ด้วยสถานะเกมปัจจุบันอย่างรวดเร็วที่สุดเท่าที่จะทำได้และลูกค้ากำลังส่งสแปมออกจากตำแหน่งพายกลับไปยังเซิร์ฟเวอร์ให้เร็วที่สุดเท่าที่จะทำได้ นี่เป็นวิธีที่ดีที่สุดที่จะทำ? มีความล่าช้าบ้างไหมที่ฉันควรเพิ่มดังนั้นข้อความจะถูกส่งหนึ่งครั้งในทุกๆ X มิลลิวินาทีหรือฉันควรจะส่งข้อความเมื่อเกิดเหตุการณ์เท่านั้น (เช่นความเร็วพายเปลี่ยนไปเนื่องจากผู้ใช้ป้อน) จะเป็นการดีกว่าหรือไม่ที่จะทำให้ลูกค้าสื่อสารตำแหน่งพายเรือของพวกเขากับเพื่อนคนอื่น ๆ ฉันถามคำถามเหล่านี้ในบริบทของโป่ง แต่ก็สนใจว่าจะเอาชนะปัญหาเหล่านี้ได้อย่างไรในเกมอื่นหรือแก้ไขปัญหาทั่วไป

3
ฉันจะซิงค์สถานะเกมแบบผู้เล่นหลายคนได้อย่างมีประสิทธิภาพกว่าการอัพเดทแบบเต็มได้อย่างไร
ฉันเคยทำการเข้ารหัสเครือข่ายเกมมาก่อน แต่ส่วนใหญ่ใช้ TCP สำหรับเกมโดยไม่ต้องใช้เวลาจริง ฉันกำลังทำงานกับเกม 2D Java ที่มีผู้เล่นหลายคนบนเครือข่าย เพื่อการเรียนรู้ฉันต้องการทำสิ่งนี้ด้วยตัวเองโดยไม่มี API เครือข่ายที่มีอยู่ ฉันจะแสดงสถานะเกมที่ส่งถึงลูกค้าจากเซิร์ฟเวอร์ได้อย่างมีประสิทธิภาพได้อย่างไร มีมากที่สุดที่เห็นได้ชัด แต่อาจน้อยกว่าวิธีที่มีประสิทธิภาพซึ่งจะสร้างบางประเภทของวัตถุบริบทเกมของรัฐที่มีสถานที่ตั้งของผู้เล่นแต่ละรัฐนิเมชั่น ฯลฯ และส่งออกที่ผู้เล่นแต่ละคนคือการปรับปรุงทุก ดูเหมือนจะไม่ยากอย่างยิ่งที่จะใช้งาน แต่อาจมีขนาดใหญ่เกินไปที่จะบรรลุสิ่งที่ใกล้เคียงกับการโต้ตอบแบบเรียลไทม์ (แน่นอนว่าประสบการณ์ของฉันเกี่ยวกับสิ่งนี้ จำกัด ดังนั้นฉันอาจไม่ถูกต้อง) มีวิธีที่มั่นคงที่คุณเคยใช้มาก่อนในการส่งการเปลี่ยนแปลงในสถานะและมีความแตกต่างมากพอในการปฏิบัติงานที่มีค่างานพิเศษหรือไม่

5
ทำไมฉันไม่สามารถใช้โอเปอเรเตอร์ '> =' กับ Vector3s ได้
ฉันพยายามที่จะได้รับรูปสี่เหลี่ยมผืนผ้าย้ายไปมาระหว่างสองตำแหน่งที่ผมพูดถึงและ_positionA ทั้งสองประเภท_positionB Vector3สี่เหลี่ยมผืนผ้าเคลื่อนไหวได้ดี อย่างไรก็ตามเมื่อมันมาถึง_positionBมันจะไม่เคลื่อนที่ในทิศทางตรงกันข้ามเหมือนอย่างที่ควร ฉันกลับไปที่โค้ดเพื่อดู ฉันมาถึงข้อสรุปว่าเป็นวัตถุย้ายที่ifงบในรหัสพลาดเฟรมซึ่งในตำแหน่ง rects _positionBเท่ากับ ฉันตัดสินใจที่จะปรับเปลี่ยนรหัสไปในทิศทางที่ตรงกันข้ามถ้าตำแหน่ง rects คือมากกว่าหรือเท่ากับ _positionBรหัสของฉันไม่ยาวเกินไปดังนั้นฉันจะแสดงด้านล่าง: using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

3
วิธีการหลีกเลี่ยงการควบคุมปริมาณ?
ฉันกำลังเขียนเกม iOS บนเครือข่าย เมื่อส่งแพ็คเก็ตที่มีGKMatchSendDataReliable(ซึ่งฉันสันนิษฐานว่าเป็น UDP พร้อมรหัสรับแพ็คเก็ตของตัวเองเขียน) ที่ 60 แพ็คเก็ตต่อวินาที (ดังนั้น 16 ms ระหว่างแพ็คเก็ตที่อยู่ติดกัน) เวลา ping เฉลี่ยแย่ลงอย่างรวดเร็ว: ) และเพียงแค่ส่ง "ท่วม" จาก 100 แพ็คเก็ต (ในอัตรา 60 แพ็คเก็ตต่อวินาที) ฉันวัดเวลาไปกลับโดยเฉลี่ยและนี่คือผลลัพธ์: [ 21:16:39 ]: I saw an average roundtrip time of 52.342787 ms, he saw 54.496590 ms [ 21:16:34 ]: I saw an average roundtrip …
9 networking  udp 

2
อินพุตฝั่งเซิร์ฟเวอร์
ขณะนี้ในเกมของฉันลูกค้าไม่มีอะไรนอกจากเป็น renderer เมื่อมีการเปลี่ยนแปลงสถานะอินพุตไคลเอนต์จะส่งแพ็กเก็ตไปยังเซิร์ฟเวอร์และย้ายผู้เล่นราวกับว่ากำลังประมวลผลอินพุต แต่เซิร์ฟเวอร์มีตำแหน่งสุดท้ายที่บอกตำแหน่ง วิธีนี้ใช้งานได้ดีโดยทั่วไปยกเว้นปัญหาที่สำคัญอย่างหนึ่ง: การหลุดจากขอบ โดยทั่วไปหากผู้เล่นเดินไปที่ขอบพูดหน้าผาและหยุดทันทีก่อนที่จะออกจากขอบบางครั้งในวินาทีต่อมาเขาจะหายตัวไปจากขอบ นี่เป็นเพราะแพ็คเก็ต "ฉันหยุดกด W" ถูกส่งหลังจากเซิร์ฟเวอร์ประมวลผลข้อมูล นี่คือแผนภาพความล่าช้าเพื่อช่วยให้คุณเข้าใจสิ่งที่ฉันหมายถึง: http://i.imgur.com/Prr8K.png ฉันสามารถส่งแพ็กเก็ต "W Pressed" แต่ละเฟรมเพื่อให้เซิร์ฟเวอร์ประมวลผล แต่ดูเหมือนว่าจะเป็นวิธีแก้ปัญหาแบนด์วิดท์ที่มีราคาแพง ความช่วยเหลือใด ๆ ที่ชื่นชม!

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