คุณต้องการการอัพเดตประมาณ 30 ครั้ง (หรืออาจน้อยกว่า 10 หรือ 20) ต่อวินาที สอดแทรกตำแหน่งของการเคลื่อนย้าย objectts ฝั่งไคลเอ็นต์ โดยทั่วไปคุณควรส่งข้อมูลเมื่อจำเป็นจริงๆเท่านั้น ใน WoW คุณอาจได้รับการอัปเดตเพิ่มเติมจากผู้เล่นที่คุณอยู่ในกลุ่มที่มีมากกว่าจากผู้เล่นที่อยู่ในสถานที่เดียวกัน นอกจากนี้หากผู้เล่นอื่นอยู่ห่างจากคุณคุณจะไม่ได้รับการอัปเดตเกี่ยวกับเขาต่อวินาทีมากนัก
จากนั้นส่งสแน็ปช็อตที่สมบูรณ์ไปยังผู้เล่นแต่ละคนเมื่อเขาเชื่อมต่อ หลังจากนั้นเพียงส่งการเปลี่ยนแปลงของวัตถุเกม หากไม่มีการเปลี่ยนแปลงเกิดขึ้นอย่าส่ง
จากนั้นใช้ประโยชน์จาก BitVectors อย่างหนักหรือคุณอาจเรียกมันว่าอะไรก็ตามเพื่อลดปริมาณข้อมูลที่ไม่จำเป็น! ตัวอย่าง: คุณยังสามารถลองเขียน float โดยใช้เพียงหนึ่งไบต์ (ในช่วงตั้งแต่ 0 ถึง 1 หรือ -1 ถึง 1) ดังนั้นคุณจึงมีค่าต่างกัน 256 หรือ 128 เท่านั้น แต่ผู้เล่นจะไม่สังเกตเห็นการเคลื่อนไหวกระตุกเนื่องจากการแก้ไข
ดูตัวอย่างนี้กับ LidgrenLibrary เกี่ยวกับวิธีบีบอัดข้อมูล: http://code.google.com/p/lidgren-network-gen3/wiki/Optimization
ถัดไป: ลองลดรัศมีการดูของผู้เล่นขณะที่เคลื่อนที่และส่งเฉพาะข้อมูลสำคัญในเวลานั้น จากนั้นเมื่อพวกเขาหยุดเพิ่มรัศมีการมองของพวกเขาอีกครั้ง คุณสามารถใช้ระบบแฮชเชิงพื้นที่หรือต้นไม้ bsp เพื่อลดค่าใช้จ่ายในการค้นหาวัตถุที่ "อยู่ในช่วง" นี่เป็นการอ่านที่ดีสำหรับหัวข้อ: http://en.wikipedia.org/wiki/Collision_detection
บีบอัดข้อมูลด้วยตัวคุณเองเพียงคุณเท่านั้นที่รู้เกี่ยวกับโครงสร้างข้อมูลและการเชื่อมโยงทางโลกในข้อมูล (ซึ่งสามารถและควรถูกใช้ประโยชน์) อัลกอริทึมทั่วไปเช่น Bzip2, Deflate, อะไรก็ตามควรใช้ แต่เป็นขั้นตอนสุดท้ายของการบีบอัด!
นอกจากนี้สำหรับข้อมูลที่ไม่เกี่ยวกับเกมคุณสามารถใช้เทคนิค P2P เพิ่มเติมได้ ตัวอย่าง: ผู้เล่นเล่นแอนิเมชั่น "hello" (เพียงเอฟเฟกต์กราฟิก) ผู้เล่นส่งข้อมูลนี้ไปยังเซิร์ฟเวอร์ แต่เซิร์ฟเวอร์ไม่ส่งต่อข้อมูลไปยังผู้เล่นอื่น แต่เอฟเฟกต์ที่ไม่สำคัญนี้จะถูกส่งโดยผู้เล่นเองไปยังลูกค้ารายอื่นในระยะ
แก้ไข (เพราะความคิดเห็น):
วิธีการเพิ่มเติมเพื่อลดจำนวนบิตเฉลี่ยต่อวินาทีให้กับผู้เล่นแต่ละคน:
คุณเขียนว่าคุณส่ง "วัตถุไม่เปลี่ยนแปลง" ไม่มีเหตุผลที่จะทำเช่นนี้ หากคุณกังวลเกี่ยวกับการสูญหายของแพ็กเก็ต (และทำให้การจำลองของคุณไม่ตรงกันเนื่องจากสิ่งนี้) ให้พิจารณาสิ่งต่อไปนี้: ในแต่ละการประทับเวลาคงที่ (เช่น 100, 200, 300, 400 ... ) แฮชสถานะจำลองและส่งไปยังเซิร์ฟเวอร์ . เซิร์ฟเวอร์ยืนยันหรือส่งสแน็ปช็อตที่สมบูรณ์ของข้อมูลทั้งหมดกลับ
สำหรับสิ่งต่าง ๆ เช่นจรวดหรือแม้แต่ผู้เล่นคุณสามารถใช้การแก้ไขไม่เพียง แต่การประมาณค่า แต่ยังรวมถึงการคาดการณ์เพื่อให้การจำลองสมจริงยิ่งขึ้น ตัวอย่าง 'Rocket': แทนที่จะอัปเดตด้วยข้อความเช่น "ตอนนี้อยู่ที่ตำแหน่ง x" เพียงส่งข้อความเมื่อมีสิ่งต่อไปนี้: "Rocket Spawned: ตำแหน่ง (เวกเตอร์), เวลา (ซึ่งขั้นตอนการจำลองจรวดถูกวางไข่), ความเร็ว ( เวกเตอร์)" ดังนั้นคุณไม่จำเป็นต้องรวมการหมุนเพราะปลายจะอยู่ในทิศทาง "ความเร็ว" เสมอ
รวมหลายคำสั่งในข้อความเดียวและไม่เคยส่งข้อความที่เล็กกว่า 16-20bytes เพราะส่วนหัวของ udp จะใหญ่กว่าตัวข้อความเอง อย่าส่งแพ็กเกจที่ใหญ่กว่า MTU ของโปรโตคอลของคุณเพราะการแตกแฟรกเมนต์จะทำให้ความเร็วในการส่งช้าลง