Я использую код из pymunk index_video , чтобы создать универсальную функцию, которая создает несколько автомобилей, которые соревнуются друг с другом, и если они достигают правого края экрана, они удаляются из Космоса и повторносгенерированный слева край экрана.
Проблема заключается в том, что в примере кода каждая часть автомобиля (шасси, шарнир, двигатель, колеса) добавляется в пространство отдельно.Я хотел рассматривать весь автомобиль как единое тело, координаты которого я могу отслеживать, сохраняя ссылку на весь кузов автомобиля в Списке и легко добавляя или удаляя его в Пространстве.
Кроме того, если колеса находятся слишком близко к шасси, они сталкиваются друг с другом.Я полагаю, что использование ShapeFilter может помочь избежать таких столкновений, но для этого мне нужны все детали автомобиля как одно целое.
Пожалуйста, потерпите меня.Я совершенно новичок в этом жаргоне.
def car(space):
pos = Vec2d(100,200)
wheel_color = 52,219,119
shovel_color = 219,119,52
mass = 100
radius = 25
moment = pymunk.moment_for_circle(mass, 20, radius)
wheel1_b = pymunk.Body(mass, moment)
wheel1_s = pymunk.Circle(wheel1_b, radius)
wheel1_s.friction = 1.5
wheel1_s.color = wheel_color
space.add(wheel1_b, wheel1_s)
mass = 100
radius = 25
moment = pymunk.moment_for_circle(mass, 20, radius)
wheel2_b = pymunk.Body(mass, moment)
wheel2_s = pymunk.Circle(wheel2_b, radius)
wheel2_s.friction = 1.5
wheel2_s.color = wheel_color
space.add(wheel2_b, wheel2_s)
mass = 100
size = (50,30)
moment = pymunk.moment_for_box(mass, size)
chassi_b = pymunk.Body(mass, moment)
chassi_s = pymunk.Poly.create_box(chassi_b, size)
space.add(chassi_b, chassi_s)
vs = [(0,0),(25,45),(0,45)]
shovel_s = pymunk.Poly(chassi_b, vs, transform = pymunk.Transform(tx=85))
shovel_s.friction = 0.5
shovel_s.color = shovel_color
space.add(shovel_s)
wheel1_b.position = pos - (55,0)
wheel2_b.position = pos + (55,0)
chassi_b.position = pos + (0,-25)
space.add(
pymunk.PinJoint(wheel1_b, chassi_b, (0,0), (-25,-15)),
pymunk.PinJoint(wheel1_b, chassi_b, (0,0), (-25, 15)),
pymunk.PinJoint(wheel2_b, chassi_b, (0,0), (25,-15)),
pymunk.PinJoint(wheel2_b, chassi_b, (0,0), (25, 15))
)
speed = 4
space.add(
pymunk.SimpleMotor(wheel1_b, chassi_b, speed),
pymunk.SimpleMotor(wheel2_b, chassi_b, speed)
)