【问题标题】:How to calibrate the accelerometer angle based on how the users is holding the device with Corona SDK?如何根据用户使用 Corona SDK 握持设备的方式校准加速度计角度?
【发布时间】:2017-01-05 21:54:44
【问题描述】:

大家好,我刚刚使用 Corona SDK 完成了我的应用程序,并想尝试制作我的第一款游戏。

当我的第一个应用程序学习加速度计时,我认为我的游戏也应该使用它。

所以我在屏幕上放了一个小涂鸦,让他在 X 和 Y 方向上由加速度计控制,游戏是横向的,但如果我让设备对着我倾斜,涂鸦会在 Y 方向滑出屏幕方向。

如果我躺在床上或懒洋洋地躺在沙发上,那么游戏将无法玩。

如何编写补偿这个角度的函数?

这是我目前的加速度计代码;

   display.setStatusBar(display.HiddenStatusBar)
   system.setAccelerometerInterval( 50 )

   _W = display.contentWidth
   _H = display.contentHeight

   local player = display.newImageRect("doodle.png", 64, 64)
         player:setReferencePoint(display.CenterReferencePoint)
         player.x = _W/2
         player.y = _H/2

   -- Set up the Accelerometer values in Landscape

   local motionX = 0
   local motionY = 0                

   local function onAccelerate( event )
         motionX = 10 * event.yGravity;
         motionY = 10 * event.xGravity;
   end

   Runtime:addEventListener ("accelerometer", onAccelerate);

   -- Make the player move on tilt.

   local function movePlayer (event)
        player.x = player.x + motionX;
        player.y = player.y - motionY;
   end

   Runtime:addEventListener("enterFrame", movePlayer))

【问题讨论】:

  • 只是想看看您是否解决了您的问题,因为我也遇到了同样的问题。谢谢

标签: lua coronasdk accelerometer angle tilt


【解决方案1】:

ArdentHD 也面临着类似的挑战。

您需要做的基本上是校准“静止”的 X、Y 和 Z 值。 启动游戏后,继续读取加速度计几秒钟。 在此期间,您可以显示倒计时或其他内容来安慰用户。

分别计算 X、Y 和 Z 的平均值。 这些是代表“静止”设备的值。

因此,当用户将设备直立放置时,您将获得 X = 0、Y = -1 和 Z = 0。 (设备在其背面,它将是 X = 0,Y = 0,Z = -1) 将它们保存在某个地方。 例如:

xOffset = event.xGravity
yOffset = event.yGravity
zOffset = event.zGravity

现在,而不是执行

motionX = 10 * event.yGravity;
motionY = 10 * event.xGravity;

在您的运动计算函数中,改为执行

motionX = 10 * (event.yGravity - xOffset);
motionY = 10 * (event.xGravity - yOffset);

这会清除原来的位置。

另外,请注意,如果您想真正将设备旋转 360°,您需要将motionX 和motionY 计算为xGravity 和zGravity 以及yGravity 和zGravity 的余切。否则,只有当设备水平时,运动才会感觉“真实”(zGravity 常数为 -1)。

【讨论】:

    猜你喜欢
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多