Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计)

本篇博客介绍Cocos2d-x的第一个实例——重力加速计測试。效果图(注:这里无法模拟重力感应):

--[[
AccelerometerTest.lua
重力加速器样例
]] --返回一个层
local function AccelerometerMainLayer()
-- 返回标题
local function title()
return "AccelerometerTest"
end
-- 创建一个层
local layer = cc.Layer:create() local function onEnter()
-- 设置层加速计可用
layer:setAccelerometerEnabled(true)
-- 通过初始化文本、字体,字体大小来创建一个Label
local label = cc.Label:createWithTTF(title(), "fonts/arial.ttf", 32)
-- 加入一个子节点到容器中。參数有一个局部Z轴顺序。
layer:addChild(label, 1)
-- 设置锚点。这里为中间
label:setAnchorPoint(cc.p(0.5, 0.5))
-- 设置标签的位置
label:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 50) ) -- 创建一个精灵,这里是个球
local ball = cc.Sprite:create("Images/ball.png")
-- 设置球的位置
ball:setPosition(cc.p(VisibleRect:center().x, VisibleRect:center().y))
-- 将球加入到层中
layer:addChild(ball) -- 用来回调的方法
local function accelerometerListener(event,x,y,z,timestamp)
-- 获取当前目标
local target = event:getCurrentTarget()
-- 获取目标大小。也就是球的大小
local ballSize = target:getContentSize()
-- 获取目标的位置
local ptNowX,ptNowY = target:getPosition()
-- 计算球下落的位置
ptNowX = ptNowX + x * 9.81
ptNowY = ptNowY + y * 9.81 -- math.floor是向下取整,比如(5.0)向下取整为5
local minX = math.floor(VisibleRect:left().x + ballSize.width / 2.0)
local maxX = math.floor(VisibleRect:right().x - ballSize.width / 2.0)
if ptNowX < minX then
ptNowX = minX
elseif ptNowX > maxX then
ptNowX = maxX
end local minY = math.floor(VisibleRect:bottom().y + ballSize.height / 2.0)
local maxY = math.floor(VisibleRect:top().y - ballSize.height / 2.0)
if ptNowY < minY then
ptNowY = minY
elseif ptNowY > maxY then
ptNowY = maxY
end target:setPosition(cc.p(ptNowX , ptNowY))
end -- 创建一个重力加速计事件监听器
local listerner = cc.EventListenerAcceleration:create(accelerometerListener)
-- 获取事件派发器然后设置触摸绑定到精灵,优先级为默认的0
layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listerner,ball)
end -- 退出,设置加速计不可用
local function onExit()
layer:setAccelerometerEnabled(false)
end -- 节点点击时间回调
local function onNodeEvent(event)
if "enter" == event then
onEnter()
elseif "exit" == event then
onExit()
end
end -- 注冊脚本句柄
layer:registerScriptHandler(onNodeEvent) return layer
end -- 主方法
function AccelerometerMain()
cclog("AccelerometerMain")
-- 创建一个场景
local scene = cc.Scene:create()
-- 将层加入到场景中
scene:addChild(AccelerometerMainLayer())
-- 加入返回主菜单项
scene:addChild(CreateBackMenuItem())
--
return scene
end

笔者在代码中进行详细的凝视,每个样例是一个场景(Scene),场景中加入我们须要展示的层(Layer),层中显示我们的控件(Sprite)。

这个样例涉及到了几个知识点:

1. 场景Scene

2. 层Layer

3. 标签Label

4. 精灵Sprite

5. 设置加速计

6. 设置位置

7. 设置锚点

8. 设置加速计事件监听器

9. 注冊脚本句柄函数回调

刚開始学习的人可能对以上这些知识点比較疑惑,笔者是怎样解惑的呢?首先我们须要了解最基础的东西,比方导演类、场景、层与精灵之间的关系,分别代表什么,怎样进行创建。这是我们最起码要知道。Cocos2d-x官网也为我们提供了对应的基础教程,我们能够先了解相关基础概念。让自己大概知道Cocos2d-x这个东西能做些什么,然后再细化去学习。Cocos2d-x提供的API是非常丰富的,但我们不可能全部API都能记得住,但我们最起码须要知道怎样去查询详细API的含义和用法。比方我们能够到http://cn.cocos2d-x.org/doc/cocos2d-x-3.0/index.html查询我们并不太熟悉的API。我们能够从中了解到类之间的继承关系。还有相关类的成员函数和成员变量,这对我们使用API是有非常大帮助的。

比方我要查询导演类,我就能够在搜索框输入Director,然后我们就能够查询到详细类的參考。

本篇博客就介绍到这里,希望能帮助到大家。

Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计)的更多相关文章

  1. 以一则LUA实例说明敏捷开发中“分离构造和使用”原则

    分离构造和使用 构造含义是功能的实现, 此功能是一个定义明确的处理过程, 开放出明确的接口给调用者使用. 则使用者可以直接调用接口进行使用, 但是使用者需要搞清楚, 那些是构造, 那些是使用. 不要再 ...

  2. Cocos2d Lua 越来越小样本 内存游戏

    1.游戏简介 一个"记忆"类的比赛游戏.你和电脑对战,轮到谁的回合,谁翻两张牌,假设两张牌一样.就消掉这两张牌,得2分,能够继续翻牌,假设两张牌不一样,就换一个人.直到最后.看谁的 ...

  3. Cocos2d-x 3.X手游开发实例详解

    Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰 ...

  4. 在cocos code ide的基础上构建自己的lua开发调试环境

    对于一种语言,其所谓开发调试环境, 大体有以下两方面的内容: 1.开发, 即代码编写, 主要是代码提示.补齐, 更高级一点的如变量名颜色等. 2.调试, 主要是运行状态下断点.查看变量.堆栈等. 现在 ...

  5. cocos2d-x 使用Lua

    转自:http://www.benmutou.com/blog/archives/49 1. Lua的堆栈和全局表 我们来简单解释一下Lua的堆栈和全局表,堆栈大家应该会比较熟悉,它主要是用来让C++ ...

  6. C#与lua相互调用

    Lua是一种很好的扩展性语言,Lua解释器被设计成一个很容易嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)C#调用Lua 测试环境:在VS2015中建一个C# ...

  7. Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本

    一.引言         学习Redis也有一段时间了,感触还是颇多的,但是自己很清楚,路还很长,还要继续.上一篇文章简要的介绍了如何在Linux环境下安装Lua,并介绍了在Linux环境下如何编写L ...

  8. 一个简易版本的lua debugger实现

    introduction 工欲善其事,必先利其器.lua作为一门动态语言,虽然我已经习惯了使用print来进行代码调试,但是还是有很多童鞋觉得一款好用的调试器能更好的进行lua代码编写.所以在以前接手 ...

  9. [整理]Unity3D游戏开发之Lua

    原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...

随机推荐

  1. 删掉SafeDrv病毒(这个病毒有点意思)

    1.手动删除以下文件: %program files%\common files\safedrv.exe %documents and settings%\administrator\rkoxe.dr ...

  2. Delphi体系内部的4种消息传递办法(Send,Post,Perform,Dispatch)

    一.什么是消息? 消息是windows对应用程序发送的有关‘发生了某种事件’的通知.例如点击鼠标,调整窗口大小或键盘上按下一个键,都会引起windows发送一条消息到应用程序中去,去通知应用程序发生了 ...

  3. Embedded Linux Primer----嵌入式Linux基础教程--章节介绍

    章节介绍 第一章,“导引”,简要介绍了Linux被迅速应用在嵌入式环境的驱动因素,介绍了与嵌入式Linux相关的几个重要的标准和组织. 第二章,“第一个嵌入式经历”,介绍了与后几章所构建的嵌入式Lin ...

  4. Python 中的类的相关操作

    构造函数 构造函数是任何类都有的特殊方法.当要创建一个类时,就要调用构造函数.他的名字是__init__.init的前后分别是两个下划线.时间类Time的构造函数如下: >>> cl ...

  5. Appium 命令行启动配置

    Appium 安装过后,会有图形界面,同样也支持命令行参数的启动和配置 Windws: 在windows 安装配置Appium有三种方式: Node install -g appium .exe文件安 ...

  6. Qt录音程序

    源地址:http://www.oschina.net/code/snippet_1243295_48623 [代码] [C/C++]代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  7. hdu1298 T9(手机输入法,每按一个数字,找出出现频率最高的字串,字典树+DFS)

    Problem Description A while ago it was quite cumbersome to create a message for the Short Message Se ...

  8. 圆角和圆形ImageView

    ※效果 ※代码 /** * 转换图片成圆形 * * @param bitmap * 传入Bitmap对象 * @return */ public Bitmap toRoundBitmap(Bitmap ...

  9. dataStage 7.5.1A

    ------------------------------    DataStage Server License ------------------------------ Serial Num ...

  10. 在DLL动态链接库中封装VCL的MDI子窗体

    在DLL动态链接库中封装VCL的MDI子窗体不多说了,看代码就应该明白了,曾经我遇到的问题,现在放出来大家共享! 这里是工程文件的部分: 在DLL中封装MDI子窗体需要重写DLL入口函数,具体代码如下 ...