• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

https://blog.csdn.net/wwj_748/article/details/37544835

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

   


[javascript] view plain copy
  1. --[[  
  2.   AccelerometerTest.lua  
  3.   重力加速器例子  
  4. ]]  
  5.   
  6. --返回一个层  
  7. local function AccelerometerMainLayer()  
  8.   -- 返回标题  
  9.   local function title()  
  10.     return "AccelerometerTest"  
  11.   end  
  12.   -- 创建一个层  
  13.   local layer = cc.Layer:create()  
  14.   
  15.   local function onEnter()  
  16.     -- 设置层加速计可用  
  17.     layer:setAccelerometerEnabled(true)  
  18.     -- 通过初始化文本、字体,字体大小来创建一个Label  
  19.     local label = cc.Label:createWithTTF(title(), "fonts/arial.ttf", 32)  
  20.     -- 添加一个子节点到容器中,参数有一个局部Z轴顺序。  
  21.     layer:addChild(label, 1)  
  22.     -- 设置锚点,这里为中间  
  23.     label:setAnchorPoint(cc.p(0.5, 0.5))  
  24.     -- 设置标签的位置  
  25.     label:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 50) )  
  26.   
  27.     -- 创建一个精灵,这里是个球  
  28.     local ball = cc.Sprite:create("Images/ball.png")  
  29.     -- 设置球的位置  
  30.     ball:setPosition(cc.p(VisibleRect:center().x, VisibleRect:center().y))  
  31.     -- 将球添加到层中  
  32.     layer:addChild(ball)  
  33.   
  34.     -- 用来回调的方法  
  35.     local function accelerometerListener(event,x,y,z,timestamp)  
  36.       -- 获取当前目标  
  37.       local target  = event:getCurrentTarget()  
  38.       -- 获取目标大小,也就是球的大小  
  39.       local ballSize = target:getContentSize()  
  40.       -- 获取目标的位置  
  41.       local ptNowX,ptNowY = target:getPosition()  
  42.       -- 计算球下落的位置  
  43.       ptNowX = ptNowX + x * 9.81  
  44.       ptNowY = ptNowY + y * 9.81  
  45.   
  46.       -- math.floor是向下取整,例如(5.0)向下取整为5  
  47.       local minX  = math.floor(VisibleRect:left().x + ballSize.width / 2.0)  
  48.       local maxX  = math.floor(VisibleRect:right().x - ballSize.width / 2.0)  
  49.       if ptNowX <  minX then  
  50.         ptNowX = minX  
  51.       elseif ptNowX > maxX then  
  52.         ptNowX = maxX  
  53.       end  
  54.   
  55.       local minY  = math.floor(VisibleRect:bottom().y + ballSize.height / 2.0)  
  56.       local maxY  = math.floor(VisibleRect:top().y   - ballSize.height / 2.0)  
  57.       if ptNowY < minY then  
  58.         ptNowY = minY  
  59.       elseif ptNowY > maxY then  
  60.         ptNowY = maxY  
  61.       end  
  62.         
  63.       target:setPosition(cc.p(ptNowX , ptNowY))  
  64.     end  
  65.        
  66.     -- 创建一个重力加速计事件监听器  
  67.     local listerner  = cc.EventListenerAcceleration:create(accelerometerListener)  
  68.     -- 获取事件派发器然后设置触摸绑定到精灵,优先级为默认的0    
  69.     layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listerner,ball)  
  70.   end  
  71.   
  72.   -- 退出,设置加速计不可用  
  73.   local function onExit()  
  74.     layer:setAccelerometerEnabled(false)  
  75.   end  
  76.   
  77.   -- 节点点击时间回调  
  78.   local function onNodeEvent(event)  
  79.     if "enter" == event then  
  80.       onEnter()  
  81.     elseif "exit" == event then  
  82.       onExit()  
  83.     end  
  84.   end  
  85.     
  86.   -- 注册脚本句柄  
  87.   layer:registerScriptHandler(onNodeEvent)  
  88.   
  89.   return layer  
  90. end  
  91.   
  92. -- 主方法  
  93. function AccelerometerMain()  
  94.   cclog("AccelerometerMain")  
  95.   -- 创建一个场景  
  96.   local scene = cc.Scene:create()  
  97.   -- 将层添加到场景中  
  98.   scene:addChild(AccelerometerMainLayer())  
  99.   -- 添加返回主菜单项  
  100.   scene:addChild(CreateBackMenuItem())  
  101.   --   
  102.   return scene  
  103. 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,然后我们就可以查询到具体类的参考。





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




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua函数回调技巧发布时间:2022-07-22
下一篇:
Lua记录发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap