【发布时间】:2020-05-17 17:12:25
【问题描述】:
我用 Python 3 编写了一个脚本来模拟二维的弹性碰撞。 我不知道我做错了什么,因为当我运行它时,这些球似乎相互粘连,有时会出现故障以成为一个球。另外,当一个球碰到屏幕的任何边缘时,它会弹开,但是当另一个球粘在上面时,它会导致其中一个球离开屏幕。
代码片段:
class Particle(Sprite):
def __init__(self, image):
super(Particle, self).__init__(image)
self.Vxi, self.Vyi = random.randint(-3, 3), random.randint(-3, 3)
self.mass = random.randint(1, 100) / 1000
self.schedule_interval(self.update, 1/60)
def update(self, dt):
self.xpos, self.ypos = self.position
if self.xpos <= self.width/2 or self.xpos >= scr_width - self.width/2:
self.Vxi *= -1
if self.ypos <= self.width/2 or self.ypos >= scr_height - self.height/2:
self.Vyi *= -1
for particle in director.scene.children[0][1].particles:
particle_xpos, particle_ypos = particle.position
if abs(self.xpos - particle_xpos) <= self.width/2 + particle.width/2:
if abs(self.ypos - particle_ypos) <= self.height/2 + particle.height/2:
xmomentum = (particle.mass * particle.Vxi) + (self.mass * self.Vxi)
ymomentum = (particle.mass * particle.Vyi) + (self.mass * self.Vyi)
Vxf = (xmomentum - particle.mass * (self.Vxi - particle.Vxi)) / (particle.mass + self.mass)
Vyf = (ymomentum - particle.mass * (self.Vyi - particle.Vyi)) / (particle.mass + self.mass)
self.Vxi = Vxf
self.Vyi = Vyf
self.xpos += self.Vxi
self.ypos += self.Vyi
self.position = self.xpos, self.ypos
【问题讨论】:
-
你在哪里定义
scr_width和scr_height? -
目前尚不清楚这是物理相关问题还是编码问题。如果是物理问题,这可能不是获得答案的地方,因为这个论坛专注于编码问题。
-
是编码相关的问题,scr_width和scr_height分别定义为640和480。
标签: python cocos2d-iphone physics