猫史档案馆


【代码岛3.0】怎么用 onTick 做计时器

用户:CODE张博睿CODE张博睿查看:14 回复:26 评论:14 创建时间:2020-03-17T17:39:18


很多人都想要做计时器呢~

我在我的跑酷经常用 onTick 计时器(虽然没测过精准度……),

原理是“科学”的。

emotion_编程猫_嗨起来

-----------------------------------------我是分割线-----------------------------------------

首先,来看说明文档“Event 事件 》Box3TickEvent 时钟”:

每一刻(tick)触发一次的事件,由 Box3World.onTick 触发。

示例代码

world.onTick((tickEvent) => {
    console.log(tickEvent.elapsedTimeMS);
    console.log(tickEvent.prevTick);
    console.log(tickEvent.skip);
    console.log(tickEvent.tick);
})
elapsedTimeMS

elapsedTimeMS: number

Wall clock time between ticks 两个时刻之间的时间间隔

-----------------------------------------我是分割线-----------------------------------------

 注意到了没,我只留下了这一个参数……

因为这只用一个参数。

注意:别听 Tick 是 喵ms,官方写的是:滴答声的间隔大约为喵ms。

大约!大约!如果卡了,Tick 可能是 喵000ms 也可能……

-----------------------------------------我是分割线-----------------------------------------

首先,定义一个计时器变量:

var time;

 

然后,每次 Tick 更新时增加与上次 Tick 之间的间隙加到 time 里:

world.onTick((tickEvent) => {
   time += tickEvent.elapsedTimeMS;
   //tickEvent.elapsedTimeMS 是离上次 Tick 有多少毫秒(ms)
   //也就是说,time 的单位是毫秒(ms)
})

 

如果嫌毫秒(ms)难用,可以把上面替换成下面的:

world.onTick((tickEvent) => {
   time += tickEvent.elapsedTimeMS;
   //tickEvent.elapsedTimeMS 是离上次 Tick 有多少毫秒(ms)
   //也就是说,time 的单位是毫秒(ms)
   timeS = time/1000;
   //秒与毫秒的进制为 1000,timeS 的单位是秒(s)
})

-----------------------------------------我是分割线-----------------------------------------

好啦,大体就是这样啦~

有其他问题下面评论!

 


回复

上一页1 页 / 共 1下一页
劳姆劳姆

点赞1


评论


劳姆劳姆

不错emotion_编程猫_谢谢老板

点赞1


评论


holaMEMZholaMEMZ

6666

点赞1


评论


劳姆劳姆

有人吗

点赞1


评论


ZCH编程小贝壳ZCH编程小贝壳

都是从群里的链接来了嘛.....

点赞0


评论


芜湖咸鱼芜湖咸鱼

哼!抢我的干货

点赞0


评论


CODE张博睿CODE张博睿

来一下此代码在跑酷的应用!

-----------------------------------------我是分割线-----------------------------------------

中途存档时的时间提示:

//如果你用了 timeS ...
world.say(`XXX 存档成功!用时:${timeS} 秒!`);

//如果你没用 timeS ...
world.say(`XXX 存档成功!用时:${time/1000} 秒!`);

注:XXX 视你的事件为准,我的是 ${entity.player.name}

 

跑酷结束时的提示和放大:

//如果你用了 timeS ...
if (timeS <= 500){//如果用时小于 500 秒...
   world.say(`XXX 到达终点!用时:${timeS} 秒!放大 5 倍!`);
   entity.player.scale = 5
} else {
   world.say(`XXX 到达终点!用时:${timeS} 秒!放大 2 倍!`);
   entity.player.scale = 2
}


//如果你没用 timeS ...
if (time/1000 <= 500){//如果用时小于 500 秒...
   world.say(`XXX 到达终点!用时:${time/1000} 秒!放大 5 倍!`);
   YYY.scale = 5
} else {
   world.say(`XXX 到达终点!用时:${time/1000} 秒!放大 2 倍!`);
   YYY.scale = 2
}

注:XXX 视你的事件为准,我的是 ${entity.player.name}

       YYY 视你的事件为准,我的是 entity.player

点赞1


评论


名字是什么a名字是什么a

emotion_编程猫_点赞

点赞0


评论


hecoshecos

怎么检测tick的当前时间(游戏中)?

点赞0


评论


ZNS_RemytowerJimmyZNS_RemytowerJimmy

你想加入ZNS工作室的总室——ZYT工作室吗

点赞0


评论


名字是什么a名字是什么a

挖坟

点赞0


评论


蒟蒻OIer1048576蒟蒻OIer1048576

let timer = 0
setInterval(
    ()=>{
        timer++
        world.say(timer)
    }
)

点赞0


评论


Ken李Ken李

6

点赞0


评论


Weeb_ETOWeeb_ETO

    

点赞0


评论


芜湖咸鱼芜湖咸鱼

挖坟(当时没有排版bug真的好, 现在只能用图片了

点赞2


评论


临玖临玖

666

点赞0


评论


还是那个小橙子丫还是那个小橙子丫

点赞1


评论


用户_869149用户_869149

()()()timeS未定义()

点赞0


评论


yyds二营长yyds二营长

收藏

点赞0


评论


Aaa求佛yaAaa求佛ya

()

点赞0


评论


yyds二营长yyds二营长

ddd

点赞0


评论


仙之鹤仙之鹤

emotion_编程猫_点赞

点赞0


评论


ALi_ALi_

收藏!!!

点赞0


评论


root㉿ikunliroot㉿ikunli

考古

点赞0


评论


白羊座的人白羊座的人

支持帖主

点赞0


评论


一只电报员一只电报员

挖挖

点赞1


评论