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.如果 ...
随机推荐
- javascript每日一练(五)——BOM
一.BOM打开,关闭窗口 window.open(); window.close(); <!doctype html> <html> <head> <meta ...
- Ch06 验证
6.1 服务器端验证 6.1.1 Data Annotations验证 6.1.2 扩展ModelMetadtaProvider 6.2 客户端验证 6.2.1 客户端验证初步 6.2.2 ...
- Bandwidth内存带宽測试工具
本博文为原创,遵循CC3.0协议,转载请注明出处:http://blog.csdn.net/lux_veritas/article/details/24766015 ----------------- ...
- [linux]linux命令学习-netstat
linux非常多服务都与网络相关.当服务调不通或者是启动port被占用,或者是又是被防火墙挡住的时候,就须要查询网络相关的问题,netstat命令之前仅仅会用一两个參数这里.好好学习一番. 经常使用的 ...
- gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0
从svn checkout svn://gcc.gnu.org/svn/gcc/trunk拿了GCC的最新代码,打算编译了学东西习学习C++ 11的东西,结果在configure的时候出现例如以下问题 ...
- 重操JS旧业第十弹:闭包
闭包是js最难理解,也是最蛋疼的一个名词,仿佛只可意会不可言传一样,有人说闭包说白了就是函数嵌套,也有人说闭包就是函数能够访问函数外部的变量,而内部的外部访问不了: 貌似都非常有道理,其实仔细想来只不 ...
- Google用户登录界面 Android实现
实验效果: 项目目录: Java代码(放在Src文件下) package com.bn.chap9.login; import java.io.BufferedReader; import java. ...
- [置顶] 遇到难题(bug)的解决方法心得
今天早上花了2个小时解决一个问题...界面抖动.. 最近把淄博项目的界面用BT改了,后来发现4个界面之间切换会抖动.. 就是整个界面会左右抖动... 文章出处: PHP攻城师 www.phpgcs.c ...
- 恭喜我开通了CSDN博客
准备在这里写点东西,记录我的学习过程....
- MSSQL - 通用存储过程
通用插入存储过程: -- ============================================= -- Author: HF_Ultrastrong -- Create date: ...