[程式] 想請問即時遊戲的設計問題

作者: LaPass (LaPass)   2015-07-27 11:41:35
例如
暗黑、RO、LOL、WOW、世紀帝國等等
像這種,即使,有單位,有位置,有技能的狀況
要怎麼設計多人連線的同步?
我自己的想法是
將地圖分格子,用座標去處理位置問題。
然後時間的話,則固定以0.1~0.5秒為一個單位(frame),去計算各單位的動作
client端下達命令或是使用技能時,都會用frame為單位下去做計算跟同步
傳遞訊息時用tcp傳遞每個frame的重要訊息
EX
frame 1{
a使用技能重擊攻擊b造成130傷害,變動後b還剩500hp
a消耗5單位魔力,變動後還剩95。
......
}
其他像是持續性傷害,自然生命力恢復
理論上只要一開始有給定速率跟起始值,client端應該能自己算出現在的hp值
然後,傳輸的時候,再過濾掉那個client端不該看到的資料,像是敵人的位置等等
不過我沒寫過這種程式,不確定這種作法可不可行
或是,想請問業界中確切的作法是怎麼樣呢?
作者: cowbaying (是在靠北喔)   2015-07-27 12:46:00
這類技術蠻多樣的 比較常看到的是多少ms一個tick然後這一個tick針對玩家陣列做資料廣播再來就是廣播時資料的sync接收資料(tick中)->伺服端處理->sync後廣播(tick結束)因為時間很短 通常是40ms以內 所以感覺不出差異即時性遊戲比較要注意的就是PING較高者的移動補償
作者: LaPass (LaPass)   2015-07-27 13:05:00
其實一般人的反應極限是 200ms ,拉到100ms人就感覺不出來有不同部的問題了
作者: os653   2015-07-27 14:04:00
實際上以前打遊戲100ms是感覺得出來的,會有一點鈍鈍的感覺
作者: Bencrie   2015-07-27 21:31:00
100ms 還算是 high latency 吧,都過 5 frames 了
作者: LayerZ (無法如願)   2015-07-28 01:15:00
然後就是看client如何把那一點延遲修的看不出來

Links booklink

Contact Us: admin [ a t ] ucptt.com