godot 简介-6 信号2 timer
在现实世界中,是不存在时间这个维度的。然而在游戏引擎中,时间是这个世界重要的维度之一。
如下图

timer直接被放到了和node第一层子目录,可见其重要性。和unreal一点都不一样,unreal中更加注重对象与对象之间的信号传递,在obj中的信号传递下足了功夫,他可以直观表达对象的作为和对象与对象之间的关系,就已经非常牛逼了。
而godot做得不能说不直观,只能说差点味道。这玩意儿如果说他是成熟的游戏引擎,不如说是他们在开源社区glue出来的一个免费引擎,他的受众群体基本可以说是从直接写代码的人那里演化过来的,反正我非常喜欢。反正各有各的有点。
继续官方案例
收线给sprite2d添加一个timer

简单看一看timer的属性

wait time 等待时间
one shot 跑完后不再重新跑
autostart scene被注册后就开始计时
进入sprite2d中的script中获取timer

收线 var timer在_ready执行完后,会自动注销,但是这不重要,因为在timer.timeout.connect(_on_Timer_timeout),已经把_on_Timer_timeout()这个函数注册到执行列表上面了,所以注销了也没关系。如果再次需要,就在get_node一次把它找回来。
把注册的函数写好,这里的not 就是取反,很直观,个人感觉用键盘输入感叹号!比直接输入not慢一些。

在官方教程,总是丢三落四的,我们还需要把godot的头,拖到sprite2D中

点击运行,发生什么都没改变,因为timer中autostart没有勾上

再次运行就好了。就会得到一个在闪烁的图标了。
完整代码如下。

稍微查询了timer

他的methods只有3个,叼啊。其他的都是针对参数写的函数,还不如弄成public的,或者设置一个开关,选择函数能否做成public的。

作为一款游戏开发引擎,他离写代码太近得有点过头了。
其中void start(float time_sec)可以直接开启计时,然后把wait_time设置一下。
就像这样,他会自动开始循环

当然也可以吧one_shot打开

然后会发现,然并卵只能跑到从连接的函数中把stop打开

然后把timer变成该类的全局函数。
然后我有吧start()不传入参数,那就回默认传入-1,程序会自动处理为不修改,然后跑到start中修改他的waittime


个人感觉,godot的太多功能有待完善。
心得:
不过这就是他的风格,正因为他左右引擎的非常不便利,反而能让他在未来会成为独立游戏良心开发工作室的标杆,毕竟没有模板可以套。