重力不正确
2018-7-28 12:9:33
收藏:0
阅读:75
评论:2
我的游戏中物理的代码如下:
-- dt = 每次更新后的时间
self.x = math.floor(self.x + math.sin(self.angle)*self.speed*dt)
self.y = math.floor(self.y - math.cos(self.angle)*self.speed*dt)
-- addVector(speed,angle,speed2,angle2)
self.speed,self.angle = addVector(self.speed,self.angle,g,math.pi)`
当它碰到地面时,弹起的代码如下:
self.angle = math.pi - self.angle
self.y = other.y - self.r`
此处定义了 addVector 函数:
x = math.sin(angle)*speed + math.sin(angle2)*speed2
y = math.cos(angle)*speed + math.cos(angle2)*speed2
v = math.sqrt(x^2 + y^2)
a = math.pi/2 - math.atan(y,x)
return v,a
但是当我在模拟中放置一个单独的球体,没有任何阻力或弹性时,每次弹跳后球体的高度都越来越高。任何想法是什么可能导致这个问题?
编辑:self.r 是半径,self.x 和 self.y 是球的中心位置。
点赞
用户4403144
我成功让你的代码运行并重现了你所看到的问题。我也发现很难找出问题所在。原因在于:移动物理涉及到位置,位置受速度向量影响,而速度向量又受加速度向量影响。在你的代码中,这些都存在,但它们没有明确分开。三角函数和地板函数相互作用,使得它们在最终计算位置时所起的作用难以看清。
到目前为止,帮助你实现像这样基础物理最好且最易于理解的教程是[The Nature of Code](https://natureofcode.com/book/)(免费在线阅读,带有交互式示例)。作为一项练习,我将大部分早期练习移植到了Lua。我建议你看看他如何清晰地分开计算位置、速度和加速度。
作为一个实验,将 g 增加到一个更高的数字。当我这样做时,我注意到球最终会落到地面,但是反弹太快了,它反弹的方式似乎不自然。
此外,定义 other.y - 这似乎不会影响弹跳问题,但要确切了解它是什么。
2018-07-28 15:56:04
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

你的 Y 坐标轴向下递增,向上递减。
每一帧都会使你的球向上移动一点,因为你使用了
self.y = math.floor(..)。解决方案是以最大精度存储坐标。
你可以创建一个新变量
y_for_drawing = math.floor(y),用于在整数坐标上绘制球,但是你的主y值必须包含小数部分。