2013-02-18 3 views
1

Я могу управлять «птицей» с помощью акселерометра, и это работает, моя единственная проблема заключается в том, что она работает, когда мое устройство (телефон/планшет) плоское, но это не праздно, когда вы держите его в руке играть. Есть ли способ компенсировать нулевую точку акселерометра как 30 ° (в градусах) по оси y?Как компенсировать акселерометр lua corona sdk

display.setStatusBar (display.HiddenStatusBar); 
system.setAccelerometerInterval(50); 
system.setIdleTimer(false); 
local background = display.newImage("bg.png") 


--> GAME CHARACTER 
local bird = display.newImage ("helicopter.png") 
bird.x  = 100; 
bird.y  = 100; 
bird:setReferencePoint(display.CenterReferencePoint); 

-- Speed of Movement with tilt. You can change it ans see the effects. 
local tiltSpeed   = 30; 
local motionx   = 0; 
local motiony   = 0; 
local rotation   = 0; 

local function onTilt(event) 
    -- Its for the new position of the bird 
    motionx = tiltSpeed * event.xGravity; 
    motiony = tiltSpeed * event.yGravity; 
end 

local function moveBird (event) 
    bird.x = motionx + bird.x; 
    bird.y = bird.y - motiony; 
    bird.rotation = rotation; 
end 

Runtime:addEventListener("accelerometer", onTilt) 
Runtime:addEventListener("enterFrame", moveBird) 
+0

Если у вас есть event.zGravity, то вы можете просто вращать 3D вектор силы тяжести в любой позиции, которую вы хотите. –

+0

И как я буду использовать это? –

+0

изменен на -30 :) –

ответ

2
local delta = -30/180*math.pi -- 30 degrees 
local cos_delta, sin_delta = math.cos(delta), math.sin(delta) 

local function onTilt(event) 
    -- Its for the new position of the bird 
    motionx = tiltSpeed * event.xGravity 
    motiony = tiltSpeed * (cos_delta*event.yGravity + sin_delta*event.zGravity) 
end 
Смежные вопросы