1

私の目標は、B1 と B2 の 2 つの物体が与えられたときに、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 が追加されます。

ただし、大きな問題が 1 つあります。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

このエラーは、スプリングがスペースに適用された後に発生します。

私がトレースバックから理解したことから、問題は Vec2d(Nan,Nan) 位置のボディがあることですが、この問題を適切にデバッグすることはできません。

何か間違ったことをしているのですか、それともパッケージのバグですか? 使用してはいけない方法で DumpedSpring を使用していますか? もしそうなら、代わりの提案はありますか?

どうもありがとうございました!

よろしく、ミケランジェロ

4

0 に答える 0