全国统一24小时服务热线:400-0000-889400-0000-889  / 13999887799

IT技术

当前位置:主页 > IT技术 >

Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(点击移动测试)

发布时间:2019-01-31 09:28 作者:凯发K 来源:AG集团 点击: 字号:

Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(点击移动测试)
Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(点击移动测试)

本篇博客介绍Cocos2d-x 3.2Lua示例中点击移动的例子,在这个例子你可以得到如何创建单点触摸的事件和注册事件监听回调方法。



示例代码:

--[[
ClickAndMoveTest.lua
点击与移动
]]--

-- 获取屏幕尺寸
local size = k8娱乐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


    -- 单点触摸的AAA
    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类
-- 单点触摸的AAA
    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)

最后的一个方法绑定节点到AAA中去,触摸优先级越低的越先被触摸。相同优先级的,后添加的先被触。

http://www.bkjia.com/Androidjc/859752.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/859752.htmlTechArticleCocos2d-x 3.2 Lua示例 ClickAndMoveTest(点击移动测试) Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(点击移动测试) 本篇博客介绍Cocos2d-x 3.2Lua示例中点击移...

本文源自: 凯发平台

相关文章Related Articles

如果您觉得本站还不错,就请分享给身边的好友吧


分享成功还有机会获得精美礼品哦