1. 程式人生 > >cocos2d-x-lua 單點觸控事件

cocos2d-x-lua 單點觸控事件

示例程式碼:

    local player = cc.Sprite:create(fileName)
    player:runAction(self:flyaction())
    

--touch move
    --    player:setTouchEnabled(true) -- "setTouchEnabled" is not use In cocos2d-x3.3,改為直接在onTouchBegan裡判斷,如果返回false,不能被觸控


    function onTouchBegan(pTouch,pEvent)
        local point = pTouch:getLocation()
        local rect = player:getBoundingBox()
        if (cc.rectContainsPoint(rect,point)) then
            return true;
        end
    
        return false;
    end

    function onTouchEnded(pTouch,pEvent)

    end

    function onTouchMoved(touch, event)

        local posX,posY = player:getPosition()  --獲取當前的位置
        local delta = touch:getDelta() --獲取滑動的距離
        player:setPosition(cc.p(posX + delta.x, posY + delta.y)) --給精靈重新設定位置
    end

    local listener1 = cc.EventListenerTouchOneByOne:create()  --建立一個單點事件監聽
    listener1:setSwallowTouches(true)  --是否向下傳遞
    --註冊三個回撥監聽方法
    listener1:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
    
    listener1:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )
    
    listener1:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
    
    local eventDispatcher = player:getEventDispatcher() --事件派發器
    
    eventDispatcher:addEventListenerWithSceneGraphPriority(listener1, player) --分發監聽事

注意在場景退出的時候移除監聽:

function Syplayer:onExit()
    local eventDispatcher = self:getEventDispatcher()
    eventDispatcher:removeEventListener(self.listener1)

    self:cleanup()
end

cocos2d-x 3.x Lua 中事件監聽:

有3中touch的方式,分別和cocos2dx裡的三種對應:

onTouchBegan    cc.Handler.EVENT_TOUCH_BEGAN

onTouchMoved    cc.Handler.EVENT_TOUCH_MOVED

onTouchEnded    cc.Handler.EVENT_TOUCH_ENDED

要實現touch的相關動作:存在一個監聽器listen

1.建立監聽器listen;2.註冊;3.事件派發給誰;4.新增到分發器中