作者LaPass (LaPass)
看板GameDesign
標題[程式] 想請問即時遊戲的設計問題
時間Mon Jul 27 11:41:35 2015
例如
暗黑、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端不該看到的資料,像是敵人的位置等等
不過我沒寫過這種程式,不確定這種作法可不可行
或是,想請問業界中確切的作法是怎麼樣呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.87.115
※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1437968498.A.E03.html
推 cowbaying: 這類技術蠻多樣的 比較常看到的是多少ms一個tick 07/27 12:46
→ cowbaying: 然後這一個tick針對玩家陣列做資料廣播 07/27 12:47
→ cowbaying: 再來就是廣播時資料的sync 07/27 12:47
→ cowbaying: 接收資料(tick中)->伺服端處理->sync後廣播(tick結束) 07/27 12:50
推 cowbaying: 因為時間很短 通常是40ms以內 所以感覺不出差異 07/27 12:52
→ cowbaying: 即時性遊戲比較要注意的就是PING較高者的移動補償 07/27 12:52
→ LaPass: 其實一般人的反應極限是 200ms ,拉到100ms人就感覺不出 07/27 13:05
→ LaPass: 來有不同部的問題了 07/27 13:05
推 os653: 實際上以前打遊戲100ms是感覺得出來的,會有一點鈍鈍的感覺 07/27 14:04
推 Bencrie: 100ms 還算是 high latency 吧,都過 5 frames 了 07/27 21:31
→ LayerZ: 然後就是看client如何把那一點延遲修的看不出來 07/28 01:15