love2D 无法解决两个圆的基本碰撞问题,不会引起错误
2020-11-20 17:52:9
收藏:0
阅读:134
评论:1
我正在尝试这样做,当我的红色圆圈触碰到我的白色圆圈时,红色圆圈会向后移动一步,但是我尝试的碰撞不起作用,它穿过了白色圆圈。 以下是代码
win = love.window.setMode(600, 600)
Xpos = 300
TX = 50
function love.draw()
love.graphics.setColor(1, 1, 1)
love.graphics.circle("fill", Xpos, 200, 25)
love.graphics.setColor(1, 0, 0)
love.graphics.circle("fill", TX, 200, 60)
if Xpos == TX then
Xpos = Xpos + 0.1
end
if TX >= Xpos then
TX = TX - 35
end
if love.keyboard.isDown("right") then
TX = TX + 5
end
end
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的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 代码?

你使得两个圆的中心“碰撞”了。你需要类似于以下的东西:
if (TX + 25 + 60) >= Xpos then --25 和 60 是圆的半径 TX = TX - 35 end另外。在你的代码中,以下内容只会执行一次:
if Xpos == TX then Xpos = Xpos + 0.1 end这是因为
Xpos是300,TX是50。在每次右箭头保持按下时,TX增加5。这样的话,TX在某个时刻会达到300。现在Xpos变成了300.1,而TX == Xpos永远不会再次为真,因为TX增加5,并且永远不会具有值300.1。在我的更新的代码中,它根本不会触发,因为圆的中心从未相交。如果你想要检测到碰撞,你应该使用碰撞检测本身:
if (TX + 25 + 60) >= Xpos then --25 和 60 是圆的半径 TX = TX - 35 --在这里添加代码 end此外,你的代码是次优的,并且圆的速度将受到每秒帧数的影响(有些情况可能需要,但在游戏中不想这样做),你应该将移动和碰撞检测分离到
love.update中:function love.update(dt) --先移动圆,再检查碰撞以避免出现可见的交叉 if love.keyboard.isDown("right") then TX = TX + 150 * dt --每秒移动圆 150 像素 end if (TX + 25 + 60) >= Xpos then TX = TX - 35 end end最终代码将类似于以下内容:
win = love.window.setMode(600, 600) Xpos = 300 Xpos_radius = 25 TX = 50 TX_radius = 60 function love.update(dt) if love.keyboard.isDown("right") then TX = TX + 150 * dt end if (TX + Xpos_radius + TX_radius) >= Xpos then TX = TX - 35 --如果要缓慢将白色球推开,可以将 Xpos 加 1 end end function love.draw() love.graphics.setColor(1, 1, 1) love.graphics.circle("fill", Xpos, 200, Xpos_radius) love.graphics.setColor(1, 0, 0) love.graphics.circle("fill", TX, 200, TX_radius) end