quick-cocos2d-x遊戲開發【7】——定時器,cocos2dx定時器
定時器用的地方還是比較多的,遊戲中的邏輯判斷很多都是採用每幀執行。quick對於schedule的封裝在scheduler這個lua檔案中。如果是第一次接觸quick的話,可能按照官方的api來寫一個定時器被報錯,提示schedule是一個nil值,這是因為其他的模組在初始化時都是被載入的,唯獨這個scheduler沒有載入,所以在使用的時候,第一件事是引入這個模組,
local scheduler = require("framework.scheduler")
剩下的就可以看著api來寫了,在寫quick的定時器之前還是再複習一下cocos2dx原生lua對於定時器的寫法。
每幀調用的,
void scheduleUpdateWithPriority (int priority)
void scheduleUpdateWithPriorityLua (int nHandler,int priority)
指定調用間隔時間的,
unsigned int scheduleScriptFunc (unsigned int nHandler, float fInterval, bool bPaused)
還有取消定時器事件
void unscheduleScriptEntry (unsigned int uScheduleScriptEntryID)
quick的scheduler主要是對後面兩個函數的封裝。在c++的cocos使用中,我們使用定時器,無非就是每幀調用,間隔時間調用無數次,間隔時間調用指定次數,間隔時間調用一次,取消調用這幾個。
我們依次來看下,
每幀調用,
local time = 0 local function update(dt) time = time + 1 label:setString(string.format("%d", time)) end scheduler.scheduleUpdateGlobal(update)
間隔一定時間調用,
local time = 0 local function onInterval(dt) time = time + 1 label:setString(string.format("%d", time)) end scheduler.scheduleGlobal(onInterval, 1)
間隔時間調用一次,這個封裝的不錯,很常用
local time = 0 local function onInterval(dt) time = time + 1 label:setString(string.format("%d", time)) print("over") end scheduler.performWithDelayGlobal(onInterval, 1)
可以看下這個是怎麼實現的,
function scheduler.performWithDelayGlobal(listener, time) local handle handle = sharedScheduler:scheduleScriptFunc(function() scheduler.unscheduleGlobal(handle) listener() end, time, false) return handleend
其實就是在間隔一定時間後,將其停止,然後執行一次回呼函數就可以了。
封裝的最後一個是停止這些定時器,
scheduler.unscheduleGlobal()
它的參數是前面那些定時器返回的控制代碼,所以如果需要在後面停止掉,記得在建立的留一個返回值就好了。
不過在遊戲中,我們可能會做一個倒計時,也就是間隔一定時間調用指定的次數,這個是在quick中沒有封裝的,但是我們還是可以自己動手實現一下,原理也很簡單,每次執行一次就計個數,達到指定的次數就停止定時器,
local handle local interval = 1 local repeatIndex = 3 local index = 0 local sharedScheduler = CCDirector:sharedDirector():getScheduler() handle = sharedScheduler:scheduleScriptFunc(function() index = index + 1 label:setString(string.format("%d", index)) if index >= repeatIndex then scheduler.unscheduleGlobal(handle) print("over") end end, interval, false)
效果
這樣就ok了,大家可以自己試一試哈。
定時器就是這樣子了。
s7 300定時器怎設定時間
調用接通延時的時間繼電器,分配T幾,然後在時間輸入裡比如要定時1分30秒,直接輸入S5T#1M30S,如果是1小時23分37秒,則寫入S5T#1H23M37S,即以S5T#為首碼,後面直接跟幾時幾分幾秒
S7-300中的PLC定時器指令採用了( )觸發
選A
西門子 S7-300/400 定時器的區別
SIEMENS S7-300/400系列PLC共有5種定時器指令,它們是:S_PULSE(脈衝定時器)、S_PEXT(擴充脈衝定時器)、S_ODT(接通延時定時器)、S_ODTS(保持型接通延時定時器)、S_OFFDT(斷電延時定時器)。下面分別說明這5種定時器指令的區別。
1、S_PULSE(脈衝定時器)
其工作特點為:輸入為1,定時器開始計時,定時位為1;計時時間到,定時器停止工作,定時位為0。如在定時時間未到時,輸入變為0,則定時器停止工作,定時器位為變為0。
2、S_PEXT(擴充脈衝定時器)
其工作特點為:輸入從0→1時,定時器開始工作計時,定時器位為1;定時時間到,定時器位為0。在定時過程中,輸入訊號斷開不影響定時器的計時(定時器繼續計時)。
3、S_ODT(接通延時定時器)
其工作特點為:輸入訊號為1,定時器開始計時(定時器位為0);計時時間到,定時器位為1。計時時間到後,若輸入訊號斷開,則定時器位變為0。如在計時時間未到時,輸入訊號變為0,則定時器停止計時。
4、S_ODTS(保持型接通延時定時器)
其工作特點為:輸入訊號為1,定時器開始工作並計時,計時時間到,定時器位為1。輸入訊號只起一個觸發定時器工作的作用,在計時過程中輸入訊號斷開不影響定時器計時和定時器位。定時器位只有使用複位指令才能變為0並觸發下一個定時器定時工作。
5、S_OFFDT(斷電延時定時器)
其工作特點為:輸入訊號由0→1時,定時器位為1(但定時器不開始計時);當輸入訊號由1→0時,定時器才開始計時,計時時間到,定時器位變為0。在計時過程中,輸入訊號由0→1將複位定時器,當由1→0時重新開始計時。