在前面已經學過了“觸摸事件”,"觸摸捕獲事件",“按鍵事件”,此外,quick還有其他幾個事件,前面已經列過有這些,
預定義的節點事件:
- cc.NODE_EVENT - enter, exit 等事件
- cc.NODE_ENTER_FRAME_EVENT - 幀事件
- cc.NODE_TOUCH_EVENT - 觸摸事件
- cc.NODE_TOUCH_CAPTURE_EVENT - 捕獲觸摸事件
預定義的層事件:
- cc.ACCELERATE_EVENT - 重力感應事件
- cc.KEYPAD_EVENT - 硬件按鍵事件
預定義的菜單事件:
- cc.MENU_ITEM_CLICKED_EVENT - CCMenu 菜單項點擊事件
節點事件其實就是節點的幾個生命週期,這在cocos2dx c++中一定有所瞭解。直接看代碼吧,
local layer = display.newLayer()
self:addChild(layer)
layer:addNodeEventListener(cc.NODE_EVENT, function (event)
if event.name == "enter" then
print("enter")
elseif event.name == "exit" then
print("exit")
elseif event.name == "cleanup" then
print("cleanup")
elseif event.name == "enterTransitionFinish" then
print("enterTransitionFinish")
elseif event.name == "exitTransitionStart" then
print("exitTransitionStart")
end
end)
cc.NODE_EVENT可以響應一個節點的onenter,onexit,cleanup,exitTransitionStart,enterTransitionFinish這些事件,當然如果不使用添加監聽的方式,我們也可以重寫相應的函數,
function MyScene:onEnter()
end
function MyScene:onExit()
end
幀事件就是update定時器,每一幀調用,如果要使用,除了要添加監聽,還需要開啓update定時器,像這樣的代碼,
local layer = display.newLayer()
self:addChild(layer)
layer:scheduleUpdate()
layer:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT, function(dt)
print(dt)
end)
對於其他幾個事件就不多介紹了,來說說怎麼掌握他們。
主要的問題是對於回調函數中的參數變量,例如加速度事件,event後面可以點出哪些呢,我是這麼確定的,
因爲在2.2.3版本開始,事件分發機制就重新制作了,進入 \quick-cocos2d-x-2.2.5\framework\cocos2dx目錄下,再看前面對於這些事件的分類,加速度事件屬於層的預定義,所以在LayerEx.lua文件中,觸屏,幀事件等屬於節點預定義,所以就在NodeEx.lua文件中。
然後打開這些文件就可以發現它們有哪些可用字段了,例如加速度事件,打開LayerEx.lua文件,可以看到這樣的代碼,
function Layer:addAccelerateEventListener(listener)
PRINT_DEPRECATED("Layer.addAccelerateEventListener() is deprecated, please use Layer.addNodeEventListener()")
self:addNodeEventListener(c.ACCELERATE_EVENT, function(event)
listener(event.x, event.y, event.z, event.timestamp)
end)
end
listener裏面的這些就是quick提供的了,這樣一來就可以添加事件監聽了,並在回調函數中寫相應的事件了。這些是被摒棄的寫法了,但裏面都提供了使用addNodeEventListener方式,所以。。。
以上就是全部事件的介紹了。我覺得quick到這掌握的就應該差不多了,可以寫些小遊戲來耍耍了~不知道大家有沒有興趣自己寫個呢,哈哈