1

我的目标是重现一个自上而下的物理系统,其中给定两个物体 B1 和 B2,当 B1 撞击 B2 时,B2 抵抗阻力并试图回到初始位置。

像这样的东西:

t = 0       B2      B1
t = 0       B2    B1
t = 0       B2   B1
t = 0       B2 B1
t = 0      B2B1
t = 0     B2B1
t = 0    B2B1
t = 0     B2B1
t = 0      B2B1
t = 0       B2B1

我设法通过使用 DampedSpring 和静态体将 B2 与初始位置连接来获得这种效果。

代码可以在gist 链接中找到

这就是代码的结果。 碰撞测试 当主体变为绿色时,添加了 DumpedSpring。

然而有一个大问题。如果我使用DrawOptions来绘制 pymunk 对象,则会收到以下错误:

From cffi callback <function SpaceDebugDrawOptions.__init__.<locals>.f2 at 0x7f0540918f80>:
Traceback (most recent call last):
  File "/home/michelangelo/miniconda3/envs/main/lib/python3.7/site-packages/pymunk/space_debug_draw_options.py", line 74, in f2
    Vec2d._fromcffi(a), Vec2d._fromcffi(b), self._c(color))
  File "/home/michelangelo/miniconda3/envs/main/lib/python3.7/site-packages/pymunk/pygame_util.py", line 124, in draw_segment
    p1 = to_pygame(a, self.surface)
  File "/home/michelangelo/miniconda3/envs/main/lib/python3.7/site-packages/pymunk/pygame_util.py", line 184, in to_pygame
    return int(p[0]), surface.get_height()-int(p[1])
ValueError: cannot convert float NaN to integer

将弹簧应用到空间后发生错误。

从我从 Traceback 中了解到的问题是有一个带有 Vec2d(Nan,Nan) 位置的主体,但是我无法正确调试这个问题。

我做错了什么还是包中的错误?我是否以不应该使用的方式使用 DumpedSpring?如果是这样,你有什么替代建议吗?

非常感谢!

亲切的问候,米开朗基罗

4

0 回答 0