使用Corona SDK的加速度计移动对象

时间:2015-03-10 19:03:42

标签: lua corona

我正在开展一个小型个人项目,以便适应Corona SDK,我创建了一个静态地板和两个静态墙,然后我创建了一个球,并为其添加了动态物理。我做了一个功能,当加速度计处于活动状态时移动球,但我似乎无法正确。我可以使对象静止并且它可以移动,但是它不会与动态墙壁或地板交互,我可以使对象保持静态,但是当游戏加载时,球会弹出屏幕,应用程序崩溃。

不知道如何处理这个问题,我已经查看了日冕的示例项目。

这是我的代码。

--Set accelerometer framerate
system.setAccelerometerInterval( 60 )
--Creates Hero
local function player(xCenter, yCenter, radius )
    local player1 = display.newImageRect( "images/hero.png", 32, 31 )
    player1.x = xCenter
    player1.y = yCenter
    player1:setFillColor( 100,100,100 )
    physics.addBody( player1, "dynamic", {bounce = 0, density=1, friction=.1, radius=radius} )
    return player1
end
local hero = player(startPlatform.x+20, startPlatform.y-15, 15)
local function heroMovex(event)
    hero.x = hero.x + (hero.x*event.xGravity)
    hero.y = hero.y + (hero.y * event.yGravity-1)
end
Runtime:addEventListener("accelerometer", heroMovex)

1 个答案:

答案 0 :(得分:2)

将加速度计的重力应用于物理机构有多种方法。而不是通过调整其坐标直接移动身体,尝试设置hero的速度以匹配倾斜:

local function heroMovex( event )
    hero:setLinearVelocity( 10 * event.xGravity, -10 * event.yGravity )
end

或者,如果您不介意将加速度应用于所有事物,只需将重力绑定到加速度计:

local function tiltGravity( event )
    physics.setGravity( 10 * event.xGravity, -10 * event.yGravity )
end
Runtime:addEventListener("accelerometer", tiltGravity)