基本控件使用(三)(触摸,CallFunc,Schedule)

前端之家收集整理的这篇文章主要介绍了基本控件使用(三)(触摸,CallFunc,Schedule)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_0@在项目中,触摸是必不可少的,然而也需要经常屏蔽一些触摸,比如点击某个按钮弹出一个界面,此时只有这个界面上的事件可以触发,而下层的触摸就要关闭。这里本人主要用到了单点触摸:

@H_502_0@local function touchBega(touch,event)

@H_502_0@ returntrue

@H_502_0@end

@H_502_0@local function touchMoved(touch,event)

@H_502_0@ print(“touchMoved”)

@H_502_0@end

@H_502_0@local function touchEnded(touch,event)

@H_502_0@ print(“touchEnded”)

@H_502_0@end

@H_502_0@local listener = cc.EventListenerTouchOneByOne:create() --单点触摸对象

@H_502_0@listener:setSwallowTouches(true) --触摸消息不向下传递

@H_502_0@listener:registerScriptHandler(touchBegan,cc.Handler.EVENT_TOUCH_BEGAN)

@H_502_0@listener:registerScriptHandler(touchMoved,cc.Handler.EVENT_TOUCH_MOVED)

@H_502_0@listener:registerScriptHandler(touchEnded,cc.Handler.EVENT_TOUCH_ENDED)

@H_502_0@local dispatcher =cc.Director:getInstance():getEventDispatcher()

@H_502_0@dispatcher:addEventListenerWithSceneGraPHPriority(listener,layer)

@H_502_0@通过这样写之后,在弹出的界面上点击下层的按钮,就不会响应了。

@H_502_0@CallFunc

@H_502_0@在Lua中,动作回调只剩一个CallFunc(C++中是CallFunc,CallFuncN,CallFuncND),当然也可以传递参数和不传参数。其中,传递参数时,其参数必须是一个table。具体用法如下:

@H_502_0@local function callBackFunc1()

@H_502_0@ print(“callBackFunc1called”)

@H_502_0@end

@H_502_0@local function callBackFunc2(pSender)

@H_502_0@ print(“callBackFunc2called”) --其中pSender就是执行者

@H_502_0@end

@H_502_0@local function callBackFunc3(pSender,tab)

@H_502_0@ print(“callBackFunc3called”)

@H_502_0@ print(tab[1],tab[2])

@H_502_0@end

@H_502_0@local func1 = cc.CallFunc:create(callBackFunc1)

@H_502_0@local func2 = cc.CallFunc:create(callBackFunc2)

@H_502_0@local func3 = cc.CallFunc:create(callBackFunc3,{1,2})

@H_502_0@backSprite:runAction(cc.Sequence:create(cc.MoveTo:create(1.0,cc.p(300,300)),func1))

@H_502_0@backSprite:runAction(cc.Sequence:create(cc.MoveTo:create(1.0,func2))

@H_502_0@backSprite:runAction(cc.Sequence:create(cc.MoveTo:create(1.0,func3))

@H_502_0@实际写法上也没区别,就是带参数和不带参数(但是参数一定是一个table)

@H_502_0@schedule

@H_502_0@在Lua中,定时器有两种方式,一种是根据帧率来刷新,一种是自定义时间间隔刷新。

@H_502_0@先看第一种方式:

@H_502_0@local function update1(dt)

@H_502_0@ print(dt) --0.17左右

@H_502_0@end

@H_502_0@local scheduler =cc.Director:getInstance():getScheduler()

@H_502_0@scheduler:scheduleUpdateWithPriorityLua(update1,0)

@H_502_0@其中第一个参数就是函数名,第二个参数代表优先级(0即可)

@H_502_0@第二种形式:

@H_502_0@local updateID,time

@H_502_0@local scduduler = cc.Director:getIntance():getScheduler()

@H_502_0@local function update2(dt)

@H_502_0@ time= time + dt

@H_502_0@ iftime > 3 then

@H_502_0@ scheduler:unscheduleScriptEntry(updateID)

@H_502_0@ end

@H_502_0@end

@H_502_0@updateID = scheduler:scheduleScriptFunc(update2,0.5,false)

@H_502_0@其中这种方式开启的定时器都有一个ID,要根据ID停止定时器。开启定时器时第一个参数是函数名,第二个参数是间隔时间,第三个参数是无限循环(如果设置为true的话,那么定时器就不执行了)。

@H_502_0@目前,在cocos2dx-lua中最常用的就是第二种方式,容易操作和控制。

猜你在找的Cocos2d-x相关文章