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,然後我們就可以查詢到具體類的參考。
本篇部落格就介紹到這裡,希望能協助到大家。