Corona SDK物理引擎 - 如何对特定方向施加力?
我正在学习 Corona,作为一个学习练习,我正在使用 Corona SDK 物理引擎创建一个简单的“保持球”的游戏(http://en.wikipedia.org/wiki/Keepie_uppie)。
除了“kick”时球的运动之外,我所有的方面都正常工作。 我正在使用触摸事件的“began”阶段,通过 applyLenearImpulse 方法来应用 kick。
我的问题是,球通常表现得好像是从上方施加了力量,使其向游戏环境的地板射击。这是尽管力量在球的接触点被施加。
我想出了以下解决方法:
function ball:touch( event )
-- only allow taps in bottom half of ball
if ( event.y > ball.y and event.phase == "began" ) then
-- temporarily move floor to just below ball
floor.y = ball.y + ballSize
local flipx = 0
if(event.x > ball.x) then
flipx = event.x - ballSize
elseif(event.x < ball.x) then
flipx = event.x + ballSize
else
flipx = event.x
end
ball:applyLinearImpulse( 0, kickForce, flipx, event.y)
end
end
以上作品通过在施加力量之前将地板位置临时移动到球的下方来起作用(然后通过 enterFrame 事件侦听器将地板移回正确的位置)。
我还发现,在此解决方案中,我必须翻转事件触摸的 x 位置,否则它将沿着水平方向反弹到预期方向相反的方向。
以上显然不是理想的。我应该在施加力量之前停止球的运动吗? 如果是这样,应该如何做? 或者我完全采取了错误的方法?
原文链接 https://stackoverflow.com/questions/6124909
physics = require("physics")
引入物理引擎physics.start()
开启物理引擎physics.setGravity(0, 9.8)
设置重力ball = display.newCircle(400,100,100,100)
创建一个圆形球体physics.addBody(ball)
将球体加入到物理引擎中
function ballf(event)
if event.phase == "ended" then
vx, vy = ball:getLinearVelocity()
ball:setLinearVelocity( -vx, -vy )
end
end
定义一个函数,当球体被点击时运行,获取球体的线性速度并翻转它ball:addEventListener("touch", ballf)
为球体添加事件监听器,当触摸到球体时运行这个函数。
这是一种简单的"点击"弹球的方法。 它的原理是,当点击触摸事件结束时,它会获取当前球体的线性速度并反转它。我不知道你的代码是在干什么(看不到如何运行它)。因此我在一分钟内编写了这些代码:) 我已经爱上 Corona 不到一周了,<3。
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
applyLinearImpulse
是你想要使用的命令,但在你所有的变通方法中,你没有提到我会尝试的第一个调整:反转施加的力的方向。你贴出的代码并没有告诉我们 "kickForce" 的值;你尝试过否定它吗?