如何使用CoronaSDK中的加速度计使一个物体旋转到倾斜角度?
2017-2-4 13:12:27
收藏:0
阅读:114
评论:1
我的第一个游戏中,我有一个可以通过加速计控制的涂鸦。许多游戏中,在设备倾斜时,物体(在我的情况下是一个涂鸦鱼)会向倾斜旋转,因此它会给人一种“鱼”游向下方的假象;如果设备向上倾斜和向下倾斜,“鱼”就会上下游动。
当使用 Corona SDK 编写时,我该如何编写 lua 代码?
这是到目前为止移动涂鸦的代码;
display.setStatusBar(display.HiddenStatusBar)
system.setAccelerometerInterval( 50 )
_W = display.contentWidth
_H = display.contentHeight
local bg = display.newImageRect("images/bg.png", 480, 320)
bg:setReferencePoint(display.CenterReferencePoint)
bg.x = _W/2
bg.y = _H/2
local player = display.newImageRect("images/doodle.png", 128, 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)
local function screenBoundaries (event)
-- 左边界
if player.x < 0 + player.width/2 then
player.x = 0 + player.width/2
end
-- 右边界
if player.x > display.contentWidth - player.width/2 then
player.x = display.contentWidth - player.width/2
end
-- 上边界
if player.y < 0 + player.height/2 then
player.y = 0 + player.height/2
end
-- 下边界
if player.y > display.contentHeight - player.height/2 then
player.y = display.contentHeight - player.height/2
end
end
Runtime:addEventListener("enterFrame", screenBoundaries)
编辑;
我试图使玩家根据倾斜旋转,但它不起作用,当我在模拟器中运行它时,它没有返回任何错误,我错在哪里?
基本上,我想要做的就是当加速计 y 值增加/减少时,玩家(鱼)向上和向下游泳,但我只想要适度的倾斜角度(0 到 +/- 45 度),或者看起来更真实的角度。也许 25 - 35 度是最佳的?
我的数学已经过时了,所以我为此道歉,有人可以帮我吗?
display.setStatusBar(display.HiddenStatusBar)
system.setAccelerometerInterval( 50 )
_W = display.contentWidth
_H = display.contentHeight
local ceil = math.ceil
local pi = math.pi
local atan2 = math.atan2
local playerRotation
-- 将涂鸦鱼放在屏幕中央。
local player = display.newImageRect("images/doodle.png", 128, 64)
player:setReferencePoint(display.CenterReferencePoint)
player.x = _W/2
player.y = _H/2
-- 我的旋转函数,不确定如何正确地执行它。
local function getPlayerRotationAngle(xGravity, yGravity)
angle = math.atan2(xGravity, yGravity)
angle = angle*(180/pi)
playerRotate = ceil(360 - angle(xGravity, yGravity))
return playerRotate
end
-- 在横屏中设置加速计参数
local motionX = 0
local motionY = 0
local function onAccelerate( event )
motionX = 5 * event.yGravity;
motionY = 5 * event.xGravity;
-- 我应该在这里还是在 movePlayer 函数中放置旋转呢?
player.rotation = playerRotate(event.yGravity, event.xGravity);
end
Runtime:addEventListener ("accelerometer", onAccelerate);
-- 使玩家根据倾斜进行移动
function movePlayer (event)
player.x = player.x + motionX
player.y = player.y + motionY
end
Runtime:addEventListener("enterFrame", movePlayer)
原文链接 https://stackoverflow.com/questions/6187403
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
你的整体代码看起来很不错。 我之前做过一些类似的游戏。
但是,你提到了以下问题
你是否在实际设备上运行代码? Corona SDK 模拟器不支持模拟加速度计,因此事件永远不会触发。
如果你在设备上运行代码,请包括Crawl Space Library。 它可以让你打印任何形式的数据,包括表格。 然后在你的onAccelerate()函数中添加
print(event)
将设备连接到开发机器上,观看控制台获取你实际接收到的数据。 (如果你在Mac上开发iOS应用程序,请使用 iPhone Configuration Utility 获取数据)。然后从那里进行调试。
在main.lua的开头包括
io.output():setvbuf("no")
以先在设备上禁用控制台输出缓存。否则,设备的控制台输出将被缓冲,难以调试。