Lua_Cocos2dx 3.x版本中Lua注册事件函数

require "Cocos2d"
require "Cocos2dConstants"

-- cclog
cclog = function(...)
    print(string.format(...))
end

function __G__TRACKBACK__(msg)
    cclog("----------------------------------------")
    cclog("LUA ERROR: " .. tostring(msg) .. "\n")
    cclog(debug.traceback())
    cclog("----------------------------------------")
    return msg
end

local function main()
    collectgarbage("collect")
    -- avoid memory leak
    collectgarbage("setpause", 100)
    collectgarbage("setstepmul", 5000)

    cc.FileUtils:getInstance():addSearchPath("src")
    cc.FileUtils:getInstance():addSearchPath("res")
    cc.Director:getInstance():getOpenGLView():setDesignResolutionSize(960, 640, 0)
    
    --create scene 
    local scene = require("GameScene")
    local gameScene = scene.create()

    if cc.Director:getInstance():getRunningScene() then
        cc.Director:getInstance():replaceScene(gameScene)
    else
        cc.Director:getInstance():runWithScene(gameScene)
    end
end

local status, msg = xpcall(main, __G__TRACKBACK__)
if not status then
    error(msg)
end
require "Cocos2d"
require "Cocos2dConstants"
require("AudioEngine")

EFFECT_FILE = "sound/Blip.wav"
MUSIC_FILE = "sound/Jazz.mp3"
isEffect = false


local size = cc.Director:getInstance():getVisibleSize()

local GameScene = class("GameScene",function()
    local scene = cc.Scene:create()
    return scene
end)

function GameScene.create()
    local scene = GameScene.new()
    scene:addChild(scene:createLayer())
    return scene
end

function GameScene:ctor()

end

function GameScene.createLayer()
	local layer = cc.Layer:create()
	
	--注册事件函数
    --registerScriptTouchHandler   注册触屏事件
    --registerScriptTapHandler   注册点击事件
    --registerScriptHandler   注册节点事件
	
	--只能获取触摸事件类型和触摸坐标,不能进行触摸对象区域判断,使用的比较少
	local function onTouchEvent(event, x, y)
		if event == "began" then
		    cclog("began")
			return true
	    elseif event == "moved" then
	       cclog("moved")
	    elseif event == "ended" then
	       cclog("ended")
		end
	end
	
    layer:setTouchEnabled(true)
    layer:registerScriptTouchHandler(onTouchEvent)
	
	--点击事件,比如菜单项点击或者按钮点击
	local menuItem = cc.MenuItemImage:create("CloseNormal.png", "CloseSelected.png")
    menuItem:setPosition(cc.p(320,160))
	local function menuItemCallback(sender)
		cclog("menuItemCallback")
	end
	menuItem:registerScriptTapHandler(menuItemCallback)
	
	local menu = cc.Menu:create(menuItem)
	menu:setPosition(cc.p(0,0))
	layer:addChild(menu)
	
	--节点事件,比如场景之间切换的onEnter或者onExit
	local function onNodeEvent(event)
	    if event == "enter" then
	    	cclog("enter")
	    elseif event == "exit" then
	        cclog("exit")
	    end
	end
    layer:registerScriptHandler(onNodeEvent)
    
    --监听器注册事件,监听器最终也是调用registerScriptHandler进行注册,使用监听器可以注册触屏事件(包括单点触摸和多点触摸)、键盘事件、重力加速计事件,使用的比较多
    --触屏事件
    local function onTouchBegan(touch, event)
        cclog("onTouchBegan")
        return true
    end
    
    local function onTouchMoved(touch, event)
        cclog("onTouchMoved")
    end
    
    local function onTouchEnded(touch, event)
        cclog("onTouchEnded")
    end
    
    local listenerTouch = cc.EventListenerTouchOneByOne:create()
    listenerTouch:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
    listenerTouch:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED)
    listenerTouch:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED)
    
    layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listenerTouch,layer)
    
    --键盘事件
    local function onKeyboard(keyCode, event)
    	cclog("keyCode:"..keyCode)
    end
    local listenerKeyboard = cc.EventListenerKeyboard:create()
    listenerKeyboard:registerScriptHandler(onKeyboard,cc.Handler.EVENT_KEYBOARD_PRESSED)
    listenerKeyboard:registerScriptHandler(onKeyboard,cc.Handler.EVENT_KEYBOARD_RELEASED)
    
    layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listenerKeyboard,layer)
	
	--重力加速计事件
    local function accelerometerListener(event,x,y,z,timestamp)  
        cclog("{x = %f, y = %f}", x, y)
    end
    local listernerAccelerometer = cc.EventListenerAcceleration:create(accelerometerListener)
    
    layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listernerAccelerometer,layer)
    
	return layer
end

return GameScene


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值