月度归档:2013年10月

游戏开发中的定时器

面临问题

在游戏中我们经常会遇到定时器,例如从大方面来每日的零点,节假日双倍经验,boss刷新,从小方面来说回合制中该回合在多长时间内结束,战斗中buff/debuff状态时间,技能的cd时间等等都涉及到定时器,前一种我们实现方式比较多,例如最常用的crontab,quartz都可以实现,而后者更像一种闹钟,到时候就去唤醒一个事件.我们今天就先讨论了下后面这种”闹钟”如何实现.

设计实现

要使用闹钟我们首先想到的就是Timer,但在java 1.5后全新推出了ScheduledThreadPoolExecutor,我们用它来对Timer进行替代,其次我们需要定义一个间隔周期,让这个定时器每隔多长时间去跑一下,看看有没有什么任务可以执行,这个间隔不能太长,太长会导致某些任务触发不及时,但也不能太短,太短容易加重系统开销,我们暂定50毫秒走一次定时器,伪代码看起来像这样

阅读全文…