Re: [姆咪] 手遊的體力是怎麼寫的

作者: Apache (阿帕契)   2021-02-20 23:36:40
1. Naive Multiple Timer
直觀,但是當玩家很多的時候,放上萬個Timer顯然並不實際
2. Queue
fn ConsumeHP(User user) {
...
if (user.hp < MAX_NATIVE_HP)
queue.push({user,time::now() + FIVE_MINUTES_MS});
}
fn ProduceHP() {
while(!queue.empty() && queue.front().second <= time::now()) {
queue.front().first.hp++;
queue.pop();
}
}
fn threadEntry() {
Timer timer = new Timer(
1000, // First delay
1000, // Routine delay
ProduceHP // timer callback
);
}
這樣就能用一個Timer 去loop
效能會不會爆掉就是另一回事 其實我猜幾萬人的話應該扛得住
3. Check When Change
這個比較難形容
簡單來說,客戶端這邊可以用Naive Timer去算顯示的體力
但是後端並不會即時更新
只有在消耗或非自然增加(道具、升級)
或是用戶端請求更新(登入、本地Timer callback)的時候才去更新目前的體力
這樣就可以減少計算量
實際上應該這種方案比較實際
作者: Emerson158 (紅豆 X 八嘎 X 烏魯賽)   2021-02-20 23:38:00
學爸
作者: yulis (笨蛋 尤莉絲)   2021-02-20 23:38:00
大衛就是考慮到伺服器資源問題 這樣他有沒有當豬公倫的潛力
作者: nh60211as   2021-02-20 23:38:00
難怪窩條時間都步給我體力
作者: plzza0cats (西黑百夫長)   2021-02-20 23:39:00
大師
作者: lturtsamuel (港都都教授)   2021-02-20 23:39:00
雪霸
作者: sos976431 (sos)   2021-02-20 23:39:00
可以請大衛去上班嗎
作者: lturtsamuel (港都都教授)   2021-02-20 23:40:00
如果是我會去記錄上一次體力改變的時間跟量 每次詢問再算給他算一次之後剩下的timer就在前端做
作者: Apache (阿帕契)   2021-02-20 23:48:00
差不多
作者: SecondRun (雨夜琴聲)   2021-02-21 00:29:00
3 算體力就爆炸其他東西就不用跑了
作者: s256988452 (Steven)   2021-02-21 01:29:00
學霸

Links booklink

Contact Us: admin [ a t ] ucptt.com