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)

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


Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(点击移动测试),布布扣,bubuko.com

时间: 2024-12-25 22:13:08

Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(点击移动测试)的相关文章

Cocos2d-x 3.2 Lua示例 CaptureScreen(截屏)

Cocos2d-x 3.2 Lua示例 CaptureScreen(截屏) 转载请注明:IT_xiao小巫 Cocos2d-x截屏功能是从3.2开始提供的,本篇博客就是介绍Cocos2d-x 3.2中Lua示例中的截屏功能.效果如下所示: 例子代码如下: --[[ 截屏测试 CaptureScreenTest ]]-- -- 获取屏幕大小 local winSize = cc.Director:getInstance():getWinSize() local kTagSprite = 1 loc

Cocos2d-x 3.1.1 Lua示例 ActionEaseTest(动作)

Cocos2d-x Lua示例 ActionEaseTest(动作) 本篇博客介绍Cocos2d-x中的动作,Cocos2d-x为我们提供了丰富的动作接口,下面笔者就详细介绍一下: 本系列博客介绍的是lua的实现,想看C++实现请移步到Cocos2d-x为我们提供的例子: Action类继承关系图,各位可以到http://cn.cocos2d-x.org/doc/cocos2d-x-3.0/db/d61/classcocos2d_1_1_action.html进行参考: 本篇博客的例子并没有涉及

lua示例 - 访问数据库

-- 加载动态库 lib = assert(package.loadlib("luasql/mysql.dll","luaopen_luasql_mysql")) lib() -- 创建环境对象 env = assert (luasql.mysql()) -- 连接数据库 con = assert (env:connect ("test", "root", "123456", "localhost

Cocos2d-x 3.2 Lua示例CocosDenshionTest(音频测试)

Cocos2d-x 3.2 Lua示例CocosDenshionTest(音频测试) 本篇博客介绍Cocos2d-x 3.2中Lua示例的音频测试,Cocos2d-x使用SimpleAudioEngine这个类来实现音频的控制,比如播放.暂停.停止等操作. Lua代码中,使用的是AudioEngine,具体实现可以参考AudioEngine.lua文件,只是把SimpleAudioEngin进行了封装. 示例代码: --[[ CocosDenshionTest.lua Cocos2d-x 音频支

Cocos2d-x 3.2 Lua示例 AssetsManagerTest(资源管理器)

Cocos2d-x 3.2 Lua示例 AssetsManagerTest(资源管理器) 本篇博客介绍Cocos2d-x 为我们提供的一个类--AssetsManager在Lua中的使用例子,效果如下图: Cocos2d-x 给出的例子是AssetsManagerTest,进入会发现三个菜单项: enter reset update enter是进入场景,reset是删除本地版本,重新设置,update就是更新资源文件. 笔者使用LDT打开lua-tests测试项目: 在src目录下找到Asse

Cocos2d-x 3.2 Lua示例 XMLHttpRequestTest(Http网络请求)

Cocos2d-x 3.2 Lua示例 XMLHttpRequestTest(Http网络请求) 本篇博客介绍Cocos2d-x 3.2Lua示例中的XMLHttpRequestTest,这里提供GET和POST两种http请求方式,返回数据类型有以下几种: cc.XMLHTTPREQUEST_RESPONSE_STRING = 0  -- 返回字符串类型cc.XMLHTTPREQUEST_RESPONSE_ARRAY_BUFFER = 1 -- 返回字节数组类型cc.XMLHTTPREQUES

cocos2d的-X- luaproject的LUA脚本加密

2014/1/26 更新 近期又发现了一个非常easy的方法,事实上coco2dx已经给我们提供设置loader的方法. 注意:有个局限性,在非android平台下调用pEngine->executeScriptFile是不调用loader的,仅仅有require这样的才会调用loader.也就是说你直接executeScriptFile("main.lua")这个脚本不能加密,main.lua里面require的才干加密 过程例如以下: 1.实现自己的loader(參考int

cocos2d-x lua中实现异步加载纹理

原文地址:  http://www.cnblogs.com/linchaolong/p/4033118.html 前言   问题:最近项目中需要做一个loading个界面,界面中间有一个角色人物走动的动画,在显示这个loading界面的时候加载资源,项目是用cocos2d-x lua实现的,界面做出来后发现在加载资源的时候界面会卡住. 原因: 因为使用的不是异步加载,而且cocos2d-x没有绑定异步加载资源的api到lua中,其实在lua中实现不了异步. 想通过在lua中启动一个线程去加载资源

转载:lua和c的交互

1 extern "C" { 2 #include "lua.h" 3 #include "lualib.h" 4 #include "lauxlib.h" 5 } 6 7 #include <iostream> 8 #include <string> 9 using namespace std; 10 11 int main() 12 { 13 //Lua示例代码 14 char *szLua_cod