เพื่อประหยัดแบนด์วิดธ์ในเกมที่มีผู้เล่นหลายคนของฉันฉันจะไม่อัปเดตทุกออบเจ็กต์ทุก ๆ เห็บเซิร์ฟเวอร์แทนแต่ละอ๊อพเจ็กมีอัปเดตให้คะแนนซึ่งบอกเกมว่าวัตถุนี้คาดว่าจะได้รับการอัพเดท
เมื่อฉันได้รับข้อความอัปเดตสำหรับวัตถุฉันคำนวณเวลาที่ฉันคาดว่าจะมีการอัพเดทครั้งต่อไป:
origin = serverCurrentPosition
diff = serverNextPosition - origin
arriveTime = now + timeBetweenTicks * updateRate
เมื่อฉันวาดวัตถุฉันจะคำนวณเวลาที่เหลือจนถึงการอัปเดตครั้งถัดไปและแก้ไขตำแหน่งตามนั้น:
step = 100 / timeBetweenTicks * updateRate
delta = 1 - step * ((arriveTime - now) / 100)
position = origin + diff * delta
มันใช้งานได้ ... แต่ยังมีความกระวนกระวายใจเล็กน้อยในการวาดแม้ว่าในทฤษฎีของฉันทุกสิ่งควรจะทำงานได้ดีเพราะมาตราส่วนควรดูแลความล่าช้าบางอย่างใช่ไหม?
ดังนั้นคำถามนี่คือนี่เป็นวิธีที่ดีที่สุดหรือไม่? ฉันควรใส่ความล่าช้าที่เกิดขึ้นจริงในการคำนวณหรือไม่? ถ้าเป็นเช่นนั้นฉันจะทำอย่างไร ฉันเคยมีประสบการณ์มาบ้าง แต่ความกระวนกระวายใจก็ยิ่งแย่ลงไปอีก