mirror of https://github.com/axmolengine/axmol.git
74 lines
2.3 KiB
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
|