前提・実現したいこと
PyGameとPyODEを使って物理演算を行いたい。
発生している問題・エラーメッセージ
ODE INTERNAL ERROR 1: assertion "nj < ~((atomicord32)0) / dJCB__MAX" failed in dxStepIsland_Stage1() [step.cpp:951]
該当のソースコード
Python
1import pygame 2from pygame.locals import * 3import ode 4import matplotlib.pyplot as plt 5import sys 6 7class Point: 8 def __init__(self, x, y): 9 self.x = x 10 self.y = y 11 12 13def near_callback(args, geom1, geom2): 14 e = 0.9 # 反発係数 15 contacts = ode.collide(geom1, geom2) 16 world, contactgroup = args 17 for c in contacts: 18 c.setBounce(e) # 反発係数の値をセット 19 c.setMu(5000) # 静止摩擦係数 20 j = ode.ContactJoint(world, contactgroup, c) 21 j.attach(geom1.getBody(), geom2.getBody()) #おそらくここに問題 22 23pygame.init() 24screen = pygame.display.set_mode((600, 400)) 25 26world = ode.World() 27world.setGravity((0, -9.81, 0)) 28 29body = ode.Body(world) 30M = ode.Mass() 31M.setSphere(25000, 0.05) 32body.setMass(M) 33body.setPosition((0, 2, 0)) 34body.setForce((0, 5000, 0)) 35 36space = ode.Space() 37floor_geom = ode.GeomPlane(space, (0, 1, 0), 0) 38ball_geom = ode.GeomSphere(space, radius=0.05) 39ball_geom.setBody(body) 40contactgroup = ode.JointGroup() 41 42fps = 50 43dt = 1.0 / fps 44frame = 0 45clk = pygame.time.Clock() 46 47histry = [] 48 49while True: 50 x, y, z = body.getPosition() 51 screen.fill((255, 255, 255)) 52 for i in histry: 53 pygame.draw.circle(screen, (200, 0, 0), (int(i.x * 100 + 100), int(-i.y * 100 + 400)), 10) 54 pygame.draw.circle(screen, (0, 0, 200), (int(x * 100 + 100), int(-y * 100 + 400)), 10) 55 pygame.display.update() 56 57 if frame % 5 == 0: 58 histry.append(Point(x,y)) 59 60 61 space.collide((world, contactgroup), near_callback) 62 world.step(dt) 63 contactgroup.empty() 64 65 clk.tick(fps) 66 frame += 1 67 events = pygame.event.get() 68 for e in events: 69 if e.type == QUIT: 70 pygame.quit() 71 sys.exit()
地面(floor_geom)とボール(ball_geom)が衝突したときにエラーが発生しています。
なので、コードの
j.attach(geom1.getBody(), geom2.getBody()) #おそらくここに問題
の部分に問題がありそうです。(この行をコメントアウトするとエラーは起きず、衝突後の反発もありません)
解決方法や原因はありますか?エラーの意味だけでも助かります
補足情報(FW/ツールのバージョンなど)
Python3.7.5
Pygame 1.9.4.post1
Py3ODE 1.2.0.dev15
使用プロセッサーのタイプ(?) aarch64
あなたの回答
tips
プレビュー