cocosLua節點層添加點擊事件


方式1:

local MainScene = class("MainScene", cc.load("mvc").ViewBase)

function MainScene:onCreate()
    -- add background image
    local layer = cc.Layer:create()
    layer:addTo(self)
    layer:addChild(display.newSprite("bg_0.jpg"):move(display.center))

    -- add HelloWorld label
    --local startBtn = cc.Label:createWithSystemFont("開始", "Arial", 20)
    local startBtn = cc.Sprite:create("GameScene_nn.png", cc.rect(760,0,250,80))
    startBtn:setScale(0.25,0.25)
    startBtn:move(display.center)
    layer:addChild(startBtn)

    --local tmpLayer = cc.Layer.create()
    local startLb = cc.Label:createWithSystemFont("開始", "Arial", 40)
    startBtn:addChild(startLb)
    startLb:setPosition(120,50)

    local function touchBegan(touch, event)
        --取得注冊事件的節點,這里是layer
        local node = event:getCurrentTarget()
        --touch:getPreviousLocationInView():取得之前觸摸點的位置信息 UI坐標
        --getPreviousLocation() :OpenGL坐標
        --getLocationInView():當前坐標
        --getLocation():
        print(touch)
        return false
    end
    local function touchMoved(touch, event)
        return false
    end
    local function touchEnded(touch, event)
        return false
    end
    local function touchCanceled(touch, event)
        return false
    end
    
    local listen = cc.EventListenerTouchOneByOne:create()
    listen:registerScriptHandler(touchBegan, cc.Handler.EVENT_TOUCH_BEGAN)
    listen:registerScriptHandler(touchMoved,cc.Handler.EVENT_TOUCH_MOVED)
    listen:registerScriptHandler(touchEnded,cc.Handler.EVENT_TOUCH_ENDED)
    listen:registerScriptHandler(touchCanceled,cc.Handler.EVENT_TOUCH_CANCELLED)

    local eventDispatcher = layer:getEventDispatcher()
    --節點添加的先后順序為優先級的添加監聽器方式,節點越上層,優先級越高
    --eventDispatcher:addEventListenerWithSceneGraphPriority(listen,layer)
    --void EventDispatcher::addEventListenerWithFixedPriority(EventListener* listener, int fixedPriority)
    --固定優先級的添加監聽器方式,fixedPriority>0, 數值越小,優先級越高
    eventDispatcher:addEventListenerWithFixedPriority(listen, 1)
end
return MainScene


方式2:

   local function onTouch(eventType, x, y)
        if eventType == "began" then
            return true
        elseif eventType == "ended" then
            return onTouchEnded(x, y)
        end
    end

    layer:setTouchEnabled(true)
    layer:registerScriptTouchHandler(onTouch)


示例: 按鈕點擊后大小變化

local MainScene = class("MainScene", cc.load("mvc").ViewBase)

function MainScene:onCreate()
    -- add background image
    local layer = cc.Layer:create()
    layer:addTo(self)
    layer:addChild(display.newSprite("bg_0.jpg"):move(display.center))

    -- add HelloWorld label
    --local startBtn = cc.Label:createWithSystemFont("開始", "Arial", 20)
    local startBtn = cc.Sprite:create("GameScene_nn.png", cc.rect(760,0,250,80))
    startBtn:setScale(0.25,0.25)
    startBtn:move(display.center)
    layer:addChild(startBtn)

    --local tmpLayer = cc.Layer.create()
    local startLb = cc.Label:createWithSystemFont("開始", "Arial", 40)
    startBtn:addChild(startLb)
    startLb:setPosition(120,50)

    local startBtn1 = cc.Sprite:create("GameScene_nn.png", cc.rect(760,0,250,80))
    startBtn1:setScale(0.25,0.25)
    startBtn1:setPosition(cc.p(200,100))
    --startBtn1:move(display.center)
    layer:addChild(startBtn1)

    local function touchBegan(touch, event)

        local node = event:getCurrentTarget()
        local location = node:convertToNodeSpace(touch:getLocation())
        local targetSize = node:getContentSize()
        local rect = cc.rect(0,0,targetSize.width, targetSize.height)
        if cc.rectContainsPoint(rect, location) then
            node:setScale(0.21,0.21)
            if node==startBtn then
                print("click button 1")
            else
                print("click button 2")
            end
        end
        return true
    end
    local function touchMoved(touch, event)
        print("touchMoved")
        return false
    end
    local function touchEnded(touch, event)
        local node = event:getCurrentTarget()
        node:setScale(0.25,0.25)
        return true
    end
    local function touchCanceled(touch, event)
        print("touchCanceled")
        return false
    end
    
    local listen = cc.EventListenerTouchOneByOne:create()
    listen:registerScriptHandler(touchBegan, cc.Handler.EVENT_TOUCH_BEGAN)
    listen:registerScriptHandler(touchMoved,cc.Handler.EVENT_TOUCH_MOVED)
    listen:registerScriptHandler(touchEnded,cc.Handler.EVENT_TOUCH_ENDED)
    listen:registerScriptHandler(touchCanceled,cc.Handler.EVENT_TOUCH_CANCELLED)

    --local eventDispatcher = layer:getEventDispatcher()
    local eventDispatcher = cc.Director:getInstance():getEventDispatcher()
    eventDispatcher:addEventListenerWithSceneGraphPriority(listen,startBtn)
    local listen1 = listen:clone()
    eventDispatcher:addEventListenerWithSceneGraphPriority(listen1,startBtn1)


end
return MainScene

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM