luaUI 3

1.精灵

(1) 异步加载、切图

local textureDog = cc.Director:getInstance():getTextureCache():addImage("dog.png")

local frame0 = cc.SpriteFrame:createWithTexture(textureDog,rect)

local spriteDog = cc.Sprite:createWithSpriteFrame(frame0)

local frameCrop = cc.SpriteFrame:create("crop.png", cc.rect(0,0,105,95))                          切图

local spriteCrop = cc.Sprite:createWithSpriteFrame(frameCrop)


(2)例子

local function addSprite(img, posx, posy, scale, zorder, parent, tag)  
    local sprite = cc.Sprite:create(img)  
    sprite:setScale(scale)  
    sprite:setPosition(posx, posy)  
    parent:addChild(sprite, zorder)  
    if tag then
        sprite:setTag(tag)
    end
    return sprite  
end


2.图片按钮还有其他按钮

local function addMenu(imgn, imgs, imgd, callback, posx, posy, parent, zorder)  
    local sNormal = cc.Sprite:createWithTexture(cc.TextureCache:sharedTextureCache():addImage(imgn))  
    local sSelected = cc.Sprite:createWithTexture(cc.TextureCache:sharedTextureCache():addImage(imgs));  
    local sDisabled = cc.Sprite:createWithTexture(cc.TextureCache:sharedTextureCache():addImage(imgd));  
    local item = cc.MenuItemSprite:create(sNormal, sSelected, sDisabled)  
    item:registerScriptTapHandler(callback)  
    item:setPosition(posx, posy)  

    local menu = cc.Menu:create()  
    menu:addChild(item)  
    menu:setPosition(0, 0)  
    parent:addChild(menu, zorder)  
    return item  
end

定时

local function schduleT(tt)             --约等于1
	print(tt)
end
local schedulerID = cc.Director:getInstance():getScheduler():scheduleScriptFunc(schduleT, 1, false)
cc.Director:getInstance():getScheduler():unscheduleScriptEntry(schedulerID)

不用plist的贞动画

local function aniFrame(bimg, rectTab, times, posx, posy, layerFarm)
    local textureDog = cc.Director:getInstance():getTextureCache():addImage(bimg)

    local tab = {}
    local spriteDog = nil
    for i=1, #rectTab do
        local frame = cc.SpriteFrame:createWithTexture(textureDog, rectTab[i])
        table.insert(tab, i, frame)
        print(' 222 '..i)
        if i == 1 then
            spriteDog = cc.Sprite:createWithSpriteFrame(frame)
            spriteDog:setPosition(posx, posy)
            layerFarm:addChild(spriteDog)
        end
    end
    
    local animation = cc.Animation:createWithSpriteFrames(tab, times)
    local animate = cc.Animate:create(animation);
    spriteDog:runAction(cc.RepeatForever:create(animate))
    
    return spriteDog
end
local tab = {cc.rect(0, 0, frameWidth, frameHeight), cc.rect(frameWidth, 0, frameWidth, frameHeight)}
aniFrame("dog.png", tab, 0.25, origin.x, origin.y + visibleSize.height / 4 * 3, layerFarm)

触屏事件

touch:getLocation()                                  整个屏幕坐标

target:convertToNodeSpace(touch:getLocation())       触摸对象坐标,根据对象大小和坐标可以判断是否触摸到此精灵

local function onTouchBegan(touch, event)
    local location = touch:getLocation()
    local target = event:getCurrentTarget()
    local tlocation = target:convertToNodeSpace(touch:getLocation())
--            local location = touches[1]:getLocation()                            --多点触摸
    
    return true                                                            --只有true才会触发 move end 
end

local function onTouchMoved(touch, event)
    local delta = touch:getDelta()                                          --delta.x delta.y
end

local function onTouchEnded(touch, event)
end

--        cc.EventListenerTouchAllAtOnce:create()                                   --多点触摸
local listener = cc.EventListenerTouchOneByOne:create()
listener:setSwallowTouches(true)                                            --ture不会向下传递触摸
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 = bg:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, bg)
屏蔽层

(1)只触发按钮不触发屏蔽层
按钮里的 :setSwallowTouches(true) 默认的 事件不想下传递

eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layerFarm)

根据在scene层级(zorder)高低,设置触摸事件的优先级,按钮没有想 2.x 哪样设置了 -128 的优先级,

3.x 依靠scene 的渲染先后,设置触摸事件的优先级。

如果 layerFarm 是一个sprite,sprite 的层(zorder)比按钮高,切 :setSwallowTouches(true) 则不会相应按钮事件。

如果 layerFarm 是一个sprite,通过方法 target:convertToNodeSpace(touch:getLocation()) sprite的左小脚是触摸的 (0,0)点。


(2)按钮和屏蔽层都触发
没有绑定触摸对象,设置触摸的优先级,猜测可能是设置了 精灵的 zorder层级

listener:setSwallowTouches(false)
eventDispatcher:addEventListenerWithFixedPriority(listener,-10)

(3)只触发屏蔽层
listener:setSwallowTouches(true)
eventDispatcher:addEventListenerWithFixedPriority(listener,-10)

(4)lua下不行
绑定对象设置精灵的层级。

eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layerFarm)
eventDispatcher:setPriority(listener,-1000)


个人理解加载和释放调用

local function onNodeEvent(event)
    if "exit" == event then
        cclog('exit')
    end
    if "enter" == event then
        cclog('enter')
    end
end
bg:registerScriptHandler(onNodeEvent)









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值