Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计)
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(重力加速计)的更多相关文章
- 以一则LUA实例说明敏捷开发中“分离构造和使用”原则
分离构造和使用 构造含义是功能的实现, 此功能是一个定义明确的处理过程, 开放出明确的接口给调用者使用. 则使用者可以直接调用接口进行使用, 但是使用者需要搞清楚, 那些是构造, 那些是使用. 不要再 ...
- Cocos2d Lua 越来越小样本 内存游戏
1.游戏简介 一个"记忆"类的比赛游戏.你和电脑对战,轮到谁的回合,谁翻两张牌,假设两张牌一样.就消掉这两张牌,得2分,能够继续翻牌,假设两张牌不一样,就换一个人.直到最后.看谁的 ...
- Cocos2d-x 3.X手游开发实例详解
Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰 ...
- 在cocos code ide的基础上构建自己的lua开发调试环境
对于一种语言,其所谓开发调试环境, 大体有以下两方面的内容: 1.开发, 即代码编写, 主要是代码提示.补齐, 更高级一点的如变量名颜色等. 2.调试, 主要是运行状态下断点.查看变量.堆栈等. 现在 ...
- cocos2d-x 使用Lua
转自:http://www.benmutou.com/blog/archives/49 1. Lua的堆栈和全局表 我们来简单解释一下Lua的堆栈和全局表,堆栈大家应该会比较熟悉,它主要是用来让C++ ...
- C#与lua相互调用
Lua是一种很好的扩展性语言,Lua解释器被设计成一个很容易嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)C#调用Lua 测试环境:在VS2015中建一个C# ...
- Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本
一.引言 学习Redis也有一段时间了,感触还是颇多的,但是自己很清楚,路还很长,还要继续.上一篇文章简要的介绍了如何在Linux环境下安装Lua,并介绍了在Linux环境下如何编写L ...
- 一个简易版本的lua debugger实现
introduction 工欲善其事,必先利其器.lua作为一门动态语言,虽然我已经习惯了使用print来进行代码调试,但是还是有很多童鞋觉得一款好用的调试器能更好的进行lua代码编写.所以在以前接手 ...
- [整理]Unity3D游戏开发之Lua
原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...
随机推荐
- 在JS中,一个自定义函数如何调用另一个自定义函数中的变量
function aa1511() { var chengshi="马鞍山"; var shengfen="安徽省"; return shengfen+&quo ...
- BLE简介和Android BLE编程
一.BLE和BT区别 其实我知道许多程序员不太喜欢阅读除了代码以外的文档,因为有时这些过于冗长的文档对编程并没有更多的好处,有了协议,接口,demo差不多很多人就能写出很好质量的代码了.但其实更深入的 ...
- NGUI: Documentation
Video Tutorials Basic Tutorial (v.2.5.0+) SD & HD atlas switching (advanced) Packed Font (advanc ...
- RStudio版本号管理 整合Git
本文为原创,转载注明出处. 系统环境: win7 x64 R-3.1.0-win.exe RStudio-0.98.507.exe 前置条件:必须拥有github仓库: 如:https://githu ...
- [每日一题] OCP1z0-047 :2013-08-28 DELETE..........................................................160
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/10475707 正确答案:ACD 根据题库,操作如下: A答案能删除: oe@OCM> ...
- 【cocos2d-js公文】十七、事件分发机制
简单介绍 游戏开发中一个非常重要的功能就是交互,假设没有与用户的交互.那么游戏将变成动画,而处理用户交互就须要使用事件监听器了. 总概: 事件监听器(cc.EventListener) 封装用户的事件 ...
- 管道是如何处理HTTP请求的?
管道是如何处理HTTP请求的? 我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但是就具体的实现来说,由于其中涉及很多对象的交互,我想很 ...
- RapidCRC : Home
RapidCRC : Home What is RapidCRC? RapidCRC is a tool for windows for checking and creating CRC32 a ...
- Android 百度地图 SDK v3.0.0 (三) 加入覆盖Marker与InfoWindow使用
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- iOS 网络错误-分类
在进行网络数据交换的时候总是遇到各种各样的错误. 这些网络错误是来自client还是server. 我们来梳理一下: 我们将错误分为三个大类 操作系统错误 http请求错误 应用错误 1.操作系统错误 ...