axmol/tests/lua-tests/src/AccelerometerTest/AccelerometerTest.lua

74 lines
2.3 KiB
Lua

local function AccelerometerMainLayer()
local function title()
return "AccelerometerTest"
end
local layer = cc.Layer:create()
local function onEnter()
layer:setAccelerometerEnabled(true)
local label = cc.Label:createWithTTF(title(), "fonts/arial.ttf", 32)
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
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 listener = cc.EventListenerAcceleration:create(accelerometerListener)
layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listener, 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