zoukankan      html  css  js  c++  java
  • 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,然后我们就能够查询到详细类的參考。





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



  • 相关阅读:
    盒子垂直水平居中
    Sahi (2) —— https/SSL配置(102 Tutorial)
    Sahi (1) —— 快速入门(101 Tutorial)
    组织分析(1)——介绍
    Java Servlet (1) —— Filter过滤请求与响应
    CAS (8) —— Mac下配置CAS到JBoss EAP 6.4(6.x)的Standalone模式(服务端)
    JBoss Wildfly (1) —— 7.2.0.Final编译
    CAS (7) —— Mac下配置CAS 4.x的JPATicketRegistry(服务端)
    CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
    CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5172845.html
Copyright © 2011-2022 走看看