本人在学习ECS时,突发灵感。用快速缓冲区来做闹钟,用指针替代“闹钟计数 += 1”,在闹钟计数时不消耗CPU。
经速度测试,比GMS2自带的闹钟事件快100%
代码如下:
《创建事件》
NZB = false
NZ_pre = 10//POS:从0开始的正整数
ind=buffer_create(NZ_pre + 1,buffer_fast,1); buNZ = ind//size数字为闹钟最大时长
buffer_seek(ind,buffer_seek_end,1)
buffer_write(ind,buffer_u8,1)
/// @func f_SetNZ
/// @desc R:
/// @arg {real} NZ 要小于缓冲区大小
/*
*/#region
f_SetNZ = function(_nz){
var ind=buNZ
buffer_seek(ind,buffer_seek_start,NZ_pre)
buffer_write(ind,buffer_u8,0)
buffer_seek(ind,buffer_seek_start,_nz)
buffer_write(ind,buffer_u8,1)
NZ_pre = _nz
}#endregion
《步事件》
if (NZB) {
if (buffer_read(buNZ,buffer_u8)) {
NZB = false
//闹钟执行代码
}
}
《重启计时》
NZB = true
buffer_seek(buNZ,buffer_seek_start,0)
《继续计时》
NZB = true
《暂停计时》
NZB = false
《clear事件》
buffer_delete(buNZ)
经速度测试,比GMS2自带的闹钟事件快100%
代码如下:
《创建事件》
NZB = false
NZ_pre = 10//POS:从0开始的正整数
ind=buffer_create(NZ_pre + 1,buffer_fast,1); buNZ = ind//size数字为闹钟最大时长
buffer_seek(ind,buffer_seek_end,1)
buffer_write(ind,buffer_u8,1)
/// @func f_SetNZ
/// @desc R:
/// @arg {real} NZ 要小于缓冲区大小
/*
*/#region
f_SetNZ = function(_nz){
var ind=buNZ
buffer_seek(ind,buffer_seek_start,NZ_pre)
buffer_write(ind,buffer_u8,0)
buffer_seek(ind,buffer_seek_start,_nz)
buffer_write(ind,buffer_u8,1)
NZ_pre = _nz
}#endregion
《步事件》
if (NZB) {
if (buffer_read(buNZ,buffer_u8)) {
NZB = false
//闹钟执行代码
}
}
《重启计时》
NZB = true
buffer_seek(buNZ,buffer_seek_start,0)
《继续计时》
NZB = true
《暂停计时》
NZB = false
《clear事件》
buffer_delete(buNZ)