godot 簡(jiǎn)介-6 信號(hào)2 timer
在現(xiàn)實(shí)世界中,是不存在時(shí)間這個(gè)維度的。然而在游戲引擎中,時(shí)間是這個(gè)世界重要的維度之一。
如下圖

timer直接被放到了和node第一層子目錄,可見其重要性。和unreal一點(diǎn)都不一樣,unreal中更加注重對(duì)象與對(duì)象之間的信號(hào)傳遞,在obj中的信號(hào)傳遞下足了功夫,他可以直觀表達(dá)對(duì)象的作為和對(duì)象與對(duì)象之間的關(guān)系,就已經(jīng)非常牛逼了。
而godot做得不能說(shuō)不直觀,只能說(shuō)差點(diǎn)味道。這玩意兒如果說(shuō)他是成熟的游戲引擎,不如說(shuō)是他們?cè)陂_源社區(qū)glue出來(lái)的一個(gè)免費(fèi)引擎,他的受眾群體基本可以說(shuō)是從直接寫代碼的人那里演化過(guò)來(lái)的,反正我非常喜歡。反正各有各的有點(diǎn)。
繼續(xù)官方案例
收線給sprite2d添加一個(gè)timer

簡(jiǎn)單看一看timer的屬性

wait time 等待時(shí)間
one shot 跑完后不再重新跑
autostart scene被注冊(cè)后就開始計(jì)時(shí)
進(jìn)入sprite2d中的script中獲取timer

收線 var timer在_ready執(zhí)行完后,會(huì)自動(dòng)注銷,但是這不重要,因?yàn)樵趖imer.timeout.connect(_on_Timer_timeout),已經(jīng)把_on_Timer_timeout()這個(gè)函數(shù)注冊(cè)到執(zhí)行列表上面了,所以注銷了也沒(méi)關(guān)系。如果再次需要,就在get_node一次把它找回來(lái)。
把注冊(cè)的函數(shù)寫好,這里的not 就是取反,很直觀,個(gè)人感覺(jué)用鍵盤輸入感嘆號(hào)!比直接輸入not慢一些。

在官方教程,總是丟三落四的,我們還需要把godot的頭,拖到sprite2D中

點(diǎn)擊運(yùn)行,發(fā)生什么都沒(méi)改變,因?yàn)閠imer中autostart沒(méi)有勾上

再次運(yùn)行就好了。就會(huì)得到一個(gè)在閃爍的圖標(biāo)了。
完整代碼如下。

稍微查詢了timer

他的methods只有3個(gè),叼啊。其他的都是針對(duì)參數(shù)寫的函數(shù),還不如弄成public的,或者設(shè)置一個(gè)開關(guān),選擇函數(shù)能否做成public的。

作為一款游戲開發(fā)引擎,他離寫代碼太近得有點(diǎn)過(guò)頭了。
其中void start(float time_sec)可以直接開啟計(jì)時(shí),然后把wait_time設(shè)置一下。
就像這樣,他會(huì)自動(dòng)開始循環(huán)

當(dāng)然也可以吧one_shot打開

然后會(huì)發(fā)現(xiàn),然并卵只能跑到從連接的函數(shù)中把stop打開

然后把timer變成該類的全局函數(shù)。
然后我有吧start()不傳入?yún)?shù),那就回默認(rèn)傳入-1,程序會(huì)自動(dòng)處理為不修改,然后跑到start中修改他的waittime


個(gè)人感覺(jué),godot的太多功能有待完善。
心得:
不過(guò)這就是他的風(fēng)格,正因?yàn)樗笥乙娴姆浅2槐憷?,反而能讓他在未?lái)會(huì)成為獨(dú)立游戲良心開發(fā)工作室的標(biāo)桿,畢竟沒(méi)有模板可以套。