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