关于cocos2dx+lua注册事件函数详解

2015年03月18日 10:53 0 点赞 0 评论 更新于 2025-11-21 17:36

在本次技术分享中,我们将详细介绍Cocos2d-x + Lua环境下各类事件函数的注册方法。本文所使用的Cocos2d-x版本为3.1.1。

各类事件注册函数概述

  • registerScriptTouchHandler:用于注册触屏事件,可设置单点或多点触摸。
  • registerScriptTapHandler:用于注册点击事件。
  • registerScriptHandler:用于注册基本事件,涵盖触屏、层的进入和退出等事件。
  • registerScriptKeypadHandler:用于注册键盘事件。
  • registerScriptAccelerateHandler:用于注册加速事件。

各事件注册函数详细解析

registerScriptTouchHandler详解

该函数可设置单点或多点触摸,以下是具体示例代码:

function gameWindow:addLayerTouchEventMethod1()
local function onTouchEvent(eventType, x, y)
-- log("eventType = "..tostring(eventType))
if eventType == "began" then
-- 需要返回true
return onTouchBegan(touch, event)
elseif eventType == "moved" then
onTouchMoved(touch, event)
elseif eventType == "ended" then
onTouchEnded(touch, event)
end
end
config.bottomLayer:setTouchEnabled(true)
config.bottomLayer:registerScriptTouchHandler(onTouchEvent)
end

在上述代码中,首先定义了一个处理触摸事件的局部函数onTouchEvent,根据不同的事件类型(beganmovedended)调用相应的处理函数。然后将config.bottomLayer的触摸功能开启,并注册触摸事件处理函数。

registerScriptTapHandler注册点击事件

以下是使用registerScriptTapHandler注册点击事件的示例:

function gameWindow:addBtn()
local btn = cc.MenuItemImage:create("white.png", "black.png", "black.png")
btn:setPosition(320, 160)
local function btnClick()
log("btnClick")
end
btn:registerScriptTapHandler(btnClick)
local menu = cc.Menu:create()
config.bottomLayer:addChild(menu)
menu:setPosition(cc.p(0,0))
menu:addChild(btn)
end

此代码创建了一个图片菜单项btn,并设置其位置。定义了点击事件处理函数btnClick,当按钮被点击时会输出日志信息。最后将按钮添加到菜单中,并将菜单添加到config.bottomLayer层。

registerScriptHandler注册基本事件

注册触屏事件用法

function gameWindow:addLayerTouchEventMethod2()
-- 创建一个单点触屏事件
local listener = cc.EventListenerTouchOneByOne:create()
-- 注册触屏开始事件
listener:registerScriptHandler(onTouchBegan, cc.Handler.EVENT_TOUCH_BEGAN)
-- 注册触屏移动事件
listener:registerScriptHandler(onTouchMoved, cc.Handler.EVENT_TOUCH_MOVED)
-- 注册触屏结束事件
listener:registerScriptHandler(onTouchEnded, cc.Handler.EVENT_TOUCH_ENDED)
-- 获取层的事件派发器
local eventDispatcher = config.bottomLayer:getEventDispatcher()
-- 事件派发器 注册一个node事件
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, config.bottomLayer)
end

上述代码首先创建了一个单点触屏事件监听器listener,然后分别注册了触屏开始、移动和结束事件的处理函数。接着获取config.bottomLayer的事件派发器,并将监听器以场景图优先级添加到事件派发器中。

注册layer的进入和退出事件用法

function gameWindow:addLayerEnterAndExitEvent()
local function onNodeEvent(eventType)
if eventType == "enter" then
log("enter")
elseif eventType == "exit" then
log("exit")
end
end
config.bottomLayer:registerScriptHandler(onNodeEvent)
end

这段代码定义了一个处理节点事件的局部函数onNodeEvent,根据事件类型(enterexit)输出相应的日志信息。最后将该处理函数注册到config.bottomLayer层。

registerScriptHandler注册键盘事件

function cocoEvent.addKeyboardEvent()
local function keyboardPressed(keyCode, event)
if keyCode == 23 then
log("left")
elseif keyCode == 24 then
log("right")
elseif keyCode == 25 then
log("up")
elseif keyCode == 26 then
log("down")
end
-- log("keyCode = "..tostring(keyCode))
-- log("event = "..tostring(event))
end
local function keyboardReleased(keyCode, event)
-- log("keyCode = "..tostring(keyCode))
-- log("event = "..tostring(event))
end
local listener = cc.EventListenerKeyboard:create()
listener:registerScriptHandler(keyboardPressed, cc.Handler.EVENT_KEYBOARD_PRESSED)
listener:registerScriptHandler(keyboardReleased, cc.Handler.EVENT_KEYBOARD_RELEASED)
local eventDispatcher = config.bottomLayer:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, config.bottomLayer)
end

此代码定义了键盘按下和释放的处理函数keyboardPressedkeyboardReleased,根据不同的键码输出相应的日志信息。创建了一个键盘事件监听器listener,并将按下和释放事件的处理函数注册到监听器中。最后获取config.bottomLayer的事件派发器,将监听器以场景图优先级添加到事件派发器中。

通过以上详细介绍,你可以在Cocos2d-x + Lua环境中灵活运用各类事件注册函数,实现丰富的交互功能。