使用Corona SDK:将玩家上下移动
2014-2-5 19:37:38
收藏:0
阅读:83
评论:1
我有一个在太空中航行的玩家。由于是在太空中,因此没有重力,也就没有抛物线轨迹。玩家只是沿着从左到右的水平线行驶。玩家实际上没有移动,但是背景在移动,所以看起来像是他在移动。x值是固定的。
我有2个按钮帮助玩家避开陨石等障碍物。一个按钮提供向上的力,另一个按钮提供向下的力。按下这些按钮时调用以下函数。
function moveUp( event )
if event.phase == "ended" then
player:applyForce(0, 8, player.x, player.y)
player:setSequence("jump")
jumpChannel = audio.play(jumpSound)
end
return true
end
function moveDown( event )
if event.phase == "ended" then
player:applyForce(0, -8, player.x, player.y)
player:setSequence("jump")
jumpChannel = audio.play(jumpSound)
end
return true
end
这种实现的问题在于,每次施加力量时,玩家保持朝着那个方向前进。然后你必须朝相反的方向施加力量,他将永远朝着那个方向前进。这不是我想要的。我想要的是:
当按下向上按钮时,玩家在Y轴上向上移动一定值(例如50像素)。然后玩家在新的高度上继续沿着从左到右的水平方向前进。
当按下向下按钮时,玩家向下移动一定值。然后玩家在新的高度上继续沿着从左到右的水平方向前进。
实现这个的最佳方法是什么?我能否使用applyForce函数来实现这一点,还是有其他方法?提前感谢您的时间!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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中获取用户配置主目录的跨平台方法
你必须记住 F = ma:如果施加的力为0,加速度为0,这意味着速度不会改变。你有两个选择:
1.施加相反的力以减少速度,并在速度为0时停止。每个物体都有一个名为myBody.linearDamping的因素,你可以将其设置为非零值。如果这行不通,你可以应用自己的消减:你需要一个enterFrame事件处理程序,该事件处理程序根据当前速度更新力,使其成比例:
function enterFrame(e) local v = player:getLinearVelocity() player:applyForce(- a * v) end这里的"a"是阻尼,一些任意数字(0是您现在拥有的数字;数字越大,玩家就会更快地返回到0速度)。我没有检查applyForce()是累加的(添加到现有力量)还是绝对的(替换现有力量)。但你明白了。
2.直接移动玩家:
function moveUp( event ) if event.phase == "ended" then player:setLinearVelocity(0, 8) --每秒像素当达到所需位置时,您仍需一个enterFrame处理程序来监视位置并设置setLinearVelocity(0, 0)。
选择1会带来更平稳,更“真实”的运动效果。