• Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试)


    Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试)


     本篇博客介绍Cocos2d-x 3.2Lua演示样例中点击移动的样例,在这个样例你能够得到怎样创建单点触摸的事件和注冊事件监听回调方法。




    演示样例代码:
    --[[
    ClickAndMoveTest.lua
    点击与移动
    ]]--
    
    -- 获取屏幕尺寸
    local size = cc.Director:getInstance():getWinSize()
    local layer = nil -- 层
    local kTagSprite = 1 --精灵标记
    
    local function initWithLayer()
        local sprite = cc.Sprite:create(s_pPathGrossini)
    
    
        -- 加入�颜色层,黄色
        local bgLayer = cc.LayerColor:create(cc.c4b(255,255,0,255))
        layer:addChild(bgLayer, -1)
        
        -- 加入�
        layer:addChild(sprite, 0, kTagSprite)
        -- 设置精灵位置到(20,150)
        sprite:setPosition(cc.p(20,150))
        -- 运行跳的动作,第一个參数为持续时间,第二个參数为位置,第三个參数为跳的高度,第四个參数跳的次数  
        sprite:runAction(cc.JumpTo:create(4, cc.p(300,48), 100, 4))
    
        -- 背景层运行无限反复的动作序列,先淡进,再淡出
        bgLayer:runAction(cc.RepeatForever:create(cc.Sequence:create(
                                                     cc.FadeIn:create(1),
                                                     cc.FadeOut:create(1))))
    
        -- 触摸開始
        local function onTouchBegan(touch, event)
            return true
        end
    
        -- 触摸结束
        local function onTouchEnded(touch, event)
            -- 获取点击位置
            local location = touch:getLocation()
            
            -- 依据标记获取子节点
            local s = layer:getChildByTag(kTagSprite)
            s:stopAllActions()-- 停止全部动作
            -- 运行移动动作,移动到点击的位置
            s:runAction(cc.MoveTo:create(1, cc.p(location.x, location.y)))
            local posX, posY = s:getPosition() -- 获取精灵的位置
            local o = location.x - posX -- X轴的距离
            local a = location.y - posY -- Y轴的距离
            local at = math.atan(o / a) / math.pi * 180.0 --求角度 ,反正切函数求弧度/π*180.0
            --1弧度= 180/π, 1度=π/180
    
            -- 点击位置在下边
            if a < 0 then
                -- 点击位置在左边
                if o < 0 then
                    at = 180 + math.abs(at)
                else
                -- 点击位置在右边
                    at = 180 - math.abs(at)
                end
            end
            -- 运行旋转的动作
            s:runAction(cc.RotateTo:create(1, at))
        end
    
    
        -- 单点触摸的监听器
        local listener = cc.EventListenerTouchOneByOne:create()
        -- 注冊两个回调监听方法
        listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
        listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
        local eventDispatcher = layer:getEventDispatcher()-- 时间派发器
        -- 绑定触摸事件到层其中
        eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)
    
        return layer
    end
    
    --------------------------------
    -- Click And Move Test
    --------------------------------
    function ClickAndMoveTest()
        cclog("ClickAndMoveTest")
        local scene = cc.Scene:create()
        layer = cc.Layer:create()
    
        initWithLayer()
        scene:addChild(layer)
        scene:addChild(CreateBackMenuItem())
        
    
        return scene
    end
    


    Cocos2d-x有两种触摸事件,一种是单点触摸,一种是多点触摸,本篇博客样例使用的单点触摸事件。
    EventListenerTouchOneByOne类
    -- 单点触摸的监听器
        local listener = cc.EventListenerTouchOneByOne:create()
        -- 注冊两个回调监听方法
        listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
        listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
        local eventDispatcher = layer:getEventDispatcher()-- 时间派发器
        -- 绑定触摸事件到层其中
        eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)

    最后的一个方法绑定节点到监听器中去,触摸优先级越低的越先被触摸。同样优先级的,后加入�的先被触。

    假设认为博文对您实用处,请到以下链接为小巫投上神圣的一票。
  • 相关阅读:
    SEO简介
    30个最常用css选择器解析(转自大范甘迪)
    H5新增语义化标签footer
    H5新增语义化标签article
    H5新增语义化标签aside
    H5新增语义化标签figure
    H5新增语义化标签nav
    node 文本替换
    一键生成专题
    node命令行工具—cf-cli
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4030205.html
Copyright © 2020-2023  润新知