新的计时系统Time Sources
以前在 GameMaker 里需要用到计时器的话要么用自带的alarm
,缺点是有数量限制最多只能 12 个,要么得自己写个方法去处理,要说有多不方便,可能也谈不上,但也实在算不上好用,于是在前两个月 YoYo 引入了 TIme Sources,一套全新的计时系统,更为灵活,简单介绍一下吧。
这是文档里的流程图,应该还算清楚,基本上使用流程就是:
- 通过 create 函数创建 TS(TIme Sources)
- 通过 start 函数启动 TS
- 判断是否达到创建时设定的时间
- 到时间触发后自动调用设置的回调函数(可以为方法函数)
- 看是否设置了循环计时,若有则从第三步开始循环判断,若无则结束
然后看一下创建一个 Time Source 到底可以传入哪些参数
参数 | 类型 | 描述 |
---|---|---|
parent | Time Source ID | 父级 TS,系统自带 time_source_game 和 time_sorce_global 两个,后者无法暂停 |
period | Real | 计时器的时间跨度,根据后续设定的单位计时 |
units | Time Source Unit Constant | 计时单位,可以按秒或帧两种模式 |
callback | Method or Script Function | 计时器触发的回调函数 |
args | Array | 可选参数,一个数组,作为参数传给回调函数 |
repetitions | Real | 可选参数,设置计时器的循环次数,设为-1 则为无限循环 |
expiry_type | Time Source Expiry Constant | 可选参数,设置计时器是在计时结束后最近的一帧触发(如果结束在帧间需要判断是在前一帧还是后一帧)还是等结束后一帧触发 |
示例:
time_source = time_source_create(time_source_game, 300, time_source_units_frames, shot);
上述就是创建了一个继承内置time_source_game
的配制,然后以帧为单位计时 300 帧后触发调用一个shot
方法函数的计时器
var shot = function {
instance_create_depth(x,y,0,o_bullet)
}
那调用这样一个方法函数就可以每 300 帧发射一颗子弹,完成自动发射子弹的操作。
并且 Time Sources 还有相对丰富的控制函数可以继承、修改、判断状态等等,因此在使用上会更为灵活
time_source_create
time_source_destroy
time_source_start
time_source_stop
time_source_pause
time_source_resume
time_source_reconfigure
time_source_reset
time_source_get_children
time_source_get_parent
time_source_get_period
time_source_get_reps_completed
time_source_get_reps_remaining
time_source_get_state
time_source_get_time_remaining
time_source_get_units
time_source_exists
以及在 Beta 版里还引入了更灵活的两个函数
call_later()
call_cancel()
call_later(period, units, func, [loop=false])
可以更方便处理一些简单的计时操作