Cocos2d-x 3.1.1 Lua執行個體-AccelerometerTest(重力加速計)

來源:互聯網
上載者:User

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 layerend-- 主方法function AccelerometerMain()  cclog("AccelerometerMain")  -- 建立一個情境  local scene = cc.Scene:create()  -- 將層添加到情境中  scene:addChild(AccelerometerMainLayer())  -- 添加返回主功能表項目  scene:addChild(CreateBackMenuItem())  --   return sceneend

筆者在代碼中進行詳細的注釋,每一個例子是一個情境(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,然後我們就可以查詢到具體類的參考。





本篇部落格就介紹到這裡,希望能協助到大家。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.