【发布时间】:2018-07-28 23:56:04
【问题描述】:
我的游戏中的物理代码是这样的:
-- dt = time after each update
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是球心的位置。
【问题讨论】:
-
删除此行:
self.y = other.y - self.r反弹时不应有任何垂直位移。 -
我试过了,问题没有得到解决
-
the height of the ball after each bounce keeps getting higher- 高多少? -
顺便说一句,在
addVector(self.speed,self.angle,g,math.pi)行中使用g*dt而不是g会更正确(据我从物理课中了解到的速度增量= g*dt) -
~20% 是我的估计
标签: lua game-physics