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. 反应堆Reactor

    mvn -h 可以看到很多命令及其用途:-am --also-make 同时构建所列模块的依赖模块:-amd -also-make-dependents 同时构建依赖于所列模块的模块:-pl --pr ...

  2. Java学习笔记九(泛型)

    1.介绍 所谓的泛型就是将类型作为一种參数来传递.有了泛型后类型不再是一成不变的.能够通过泛型參数来指定. 能够提供程序开发的灵活性. 2.泛型类或接口的使用 泛型类声明时.与普通类没有太大的差别,仅 ...

  3. VS2010+QT4.8.5 +FastReport教程

    如需转载请标明出处:http://blog.csdn.net/itas109 採用QT 的QAxObject方式执行FastReport特别麻烦,并且无法在编译的时候知道代码是否正确,并且大部分的函数 ...

  4. MVC控制器里面使用dynamic和ExpandoObject

    MVC控制器里面使用dynamic和ExpandoObject 在很多时候,我们在数据库里面定义表字段和实际在页面中展示的内容,往往是不太匹配的,页面数据可能是多个表数据的综合体,因此除了我们在表设计 ...

  5. 重操JS旧业第四弹:Date与Global对象

    1 Date原理 Date类型表示时间,js中采用UTC国际协调时间,以1971年1月1日0分0秒0微秒开始,经过的毫秒数来表示时间,比如一年的时间计算 1分:1000*60: 1小时:1000(毫秒 ...

  6. BaseActivity--上门啦

    package com.fwpt.activity; import com.fwpt.entity.RyUserInfo; import com.fwpt.entity.SmlaUserinfo; i ...

  7. 基于visual Studio2013解决面试题之0704判断牌是否顺子

     题目

  8. struts2 <s:iterator/>怎样取得循环的索引

    <s:iterator value="list" id="user" status="L"> <s:property va ...

  9. C陷阱与缺陷代码分析之第1章词法陷阱

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 编译器中负责将程序分解为一个一个符号的部分,称为“词法分析器”.下面看一个例子: if(x > big) bi ...

  10. 【IACV】边缘检测技术传统的方法与理论

    1.边缘检测的目的 边缘检测是图像分析中使用到的最常见的操作之一,而且相比其他任何主题来说,文献中提到的与边缘增强(edge enhancement)[1]与边缘检测(edge detection)[ ...