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

Moving an object using the accelerometer with Corona SDK

我正在做一个小的个人项目来熟悉 Corona SDK,我创建了一个静态地板和两个静态墙,然后我创建了一个球并向其添加了动态物理。当加速度计处于活动状态时,我做了一个移动球的功能,但我似乎做对了。我可以使对象静态并且它可以四处移动,但它不会与动态墙壁或地板交互,我可以使对象静态但是当游戏加载时球只是射出屏幕并且应用程序崩溃。

不确定如何解决这个问题,我已经看过 corona 中的示例项目。

这是我的代码。

--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)

有多种方法可以将加速度计的重力应用于您的物理体。与其通过调整坐标直接移动 body,不如尝试设置 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)