如何在使用Corona SDK时根据用户持有设备的方式来校准加速度计角度?
2017-1-5 13:54:44
收藏:0
阅读:89
评论:1
嗨,大家好,我刚用 Corona SDK 完成了我的应用程序,并且想尝试制作我的第一个游戏。
由于我的第一个应用程序是学习关于加速计的,所以我认为我的游戏也应该使用加速计。
因此,我在屏幕上放了一个小涂鸦,并通过 X 和 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
-- 在横屏上设置加速计值
local motionX = 0
local motionY = 0
local function onAccelerate( event )
motionX = 10 * event.yGravity;
motionY = 10 * event.xGravity;
end
Runtime:addEventListener ("accelerometer", onAccelerate);
-- 使玩家根据倾斜移动。
local function movePlayer (event)
player.x = player.x + motionX;
player.y = player.y - motionY;
end
Runtime:addEventListener("enterFrame", movePlayer))
原文链接 https://stackoverflow.com/questions/6182224
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我们在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)时,运动才会感觉“真实”。