Cocos2d-x Lua实现长按事件

原创 2016年05月31日 20:00:50
local MainScene = class("MainScene", cc.load("mvc").ViewBase)

-- 弹出的层
local InfoLayer = class('InfoLayer',function ()
    return cc.Layer:create()
end)

function InfoLayer:ctor()
    self:setScale(0)
    local winSize = cc.Director:getInstance():getWinSize()
    local bg = cc.Sprite:create('HelloWorld.png')
    bg:setScale(0.8)
    bg:setPosition(winSize.width/2,winSize.height/2)
    self:addChild(bg)

    self:enableNodeEvents()
end

function InfoLayer:onEnter()
    self:runAction(cc.EaseBackOut:create(cc.ScaleTo:create(0.3,1)))
end

function InfoLayer:onExit()

end

-- 实现长按事件的节点
local touchNode = class('touchNode',function ()
    return cc.Node:create()
end)

local longPressTime = 1.5
local preAccTime = 0.5
function touchNode:ctor(Img)
    local bg = ccui.ImageView:create(Img)
    self:addChild(bg)
    local listener = cc.EventListenerTouchOneByOne:create()
    listener:registerScriptHandler(function(touch,event)
        self.beganPoint = touch:getLocation()
        local point = bg:convertToNodeSpace(self.beganPoint)
        local rect = cc.rect(0,0,bg:getContentSize().width,bg:getContentSize().height)
        if cc.rectContainsPoint(rect,point) then
            self.tick = 0
            self.moved = false
            self.ended = false
            local seq = cc.Sequence:create(cc.CallFunc:create(function() self:accumate() end),cc.DelayTime:create(preAccTime))
            self.acc = self:runAction(cc.RepeatForever:create(seq))
        end
        return true
    end,cc.Handler.EVENT_TOUCH_BEGAN)
    listener:registerScriptHandler(function(touch,event)
        self.movedPoint = touch:getLocation()
        self.moved = true
    end,cc.Handler.EVENT_TOUCH_MOVED)
    listener:registerScriptHandler(function(touch,event)
        self:stopAction(self.acc)
        self.ended = true
    end,cc.Handler.EVENT_TOUCH_ENDED)
    self:getEventDispatcher():addEventListenerWithSceneGraphPriority(listener,self)
    local function onNodeEvent(event)
        if event == 'exit' then
            self:getEventDispatcher():removeEventListener(listener)
        end     
    end
    self:registerScriptHandler(onNodeEvent)                 
end

function touchNode:accumate()
    self.tick = self.tick + preAccTime 
    if self.tick > longPressTime - preAccTime / 2 and self.tick <= longPressTime + preAccTime / 2 then
        self:stopAction(self.acc)
        if not self.ended then
            ---------long press---------
            local function longPress()
                local layer = InfoLayer.new()
                cc.Director:getInstance():getRunningScene():addChild(layer)              
            end
            if self.moved then
                if math.abs(self.beganPoint.x - self.movedPoint.x) < 10 and math.abs(self.beganPoint.y - self.movedPoint.y) < 10 then
                    longPress()
                end
            else
                longPress()
            end
        end
    end
end

function MainScene:ctor()
    local winSize = cc.Director:getInstance():getWinSize()
    local touchNode = touchNode.new('DS07.png')
    touchNode:setPosition(winSize.width/2,winSize.height/2)
    self:addChild(touchNode)
end

return MainScene

长按弹出层

版权声明:原创文章,欢迎转载。

Cocos2dx-Lua 长按手势

Cocos2dx只有touchUpInsid的按钮或菜单,有时可能会想要一个长按手势来触发事件。 -- 这是类名,命名这件事还是很麻烦的,凑合就是Button吧 local Button = {}...
  • drmadness
  • drmadness
  • 2015年01月28日 12:56
  • 1004

cocos2dx 利用schedule实现长按触发事件功能

感谢点评与关注,欢迎转载与分享。 勤奋努力,持之以恒! 在cocos2dx中给我们提供了很多点击屏幕触发的事件监听,比如CCMenu类的一系列 ,ccTouchBegan(CCTouc...
  • song_hui_xiang
  • song_hui_xiang
  • 2013年12月24日 11:26
  • 9472

cocos2dx lua中如何把按钮设成不可点击后 按钮变灰

lua  中 把按钮设成不可点击后 按钮变灰了,这个怎么实现的啊 把按钮setenabled...
  • u013174689
  • u013174689
  • 2014年09月10日 21:01
  • 4753

quick-cocos2d-x button使用方法

demo中给出了以下几种觉按钮 1 普通按钮 2
  • nynyvkhhiiii
  • nynyvkhhiiii
  • 2014年11月20日 10:09
  • 5924

Lua笔记:Button控件按钮创建及使用

--------------------------- Button控件按钮使用 ----------------------------------------- --lua 中 Button按钮...
  • chinahaerbin
  • chinahaerbin
  • 2015年04月20日 11:49
  • 11981

lua 中处理cocos2dx 的button 事件

来自:http://blog.163.com/yiba_suanzao/blog/static/13055737720144893945616/ 1、引入这个类:require "GuiCons...
  • zhaoshenghong
  • zhaoshenghong
  • 2015年09月14日 11:09
  • 612

[UnityUI]UGUI按钮长按效果

参考链接:http://blog.csdn.net/huutu/article/details/46448313 using UnityEngine; using System.Collectio...
  • lyh916
  • lyh916
  • 2016年05月19日 16:09
  • 4614

cocos2dx 按钮长按事件

通过touchBegin 结合 schedule 来实现 void UILayer::longTouchUpdate(float delay){ m_isLongPress = true; ...
  • strivero
  • strivero
  • 2015年12月14日 18:19
  • 2327

cocos2dx touch 单击、双击、三连击和长按事件处理

#include "TouchTest.h" TouchTest::TouchTest() { m_longProgress=false; } bool isTouch=false; ...
  • wxc734809128
  • wxc734809128
  • 2014年04月11日 22:30
  • 9153

cocos2dx touch 单击、双击、三连击和长按事件处理

#include "TouchTest.h" TouchTest::TouchTest() { m_longProgress=false; } bool isTouch=false; ...
  • wxc734809128
  • wxc734809128
  • 2014年04月11日 22:30
  • 9153
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Cocos2d-x Lua实现长按事件
举报原因:
原因补充:

(最多只允许输入30个字)