Формы тела Пиманка не вращаются, когда я поворачиваю тело.

В Pymunk, когда я вращаю тело, его формы не вращаются. Когда я подаю импульс, фигуры двигаются синхронно, как и ожидалось. Мои поиски в Google показывают, что формы тела должны вращаться, когда тело вращается. Я в корне неправильно понимаю вращение?

Вот соответствующий код вращения:

def selectEntity(self, location):
    shapes = self.space.point_query(location)
    bodies = set()
    for shape in shapes:
        bodies.add(shape.body)
    for body in bodies:
        body.angle += 1.57079633 # + 90 degrees

Вот код инициализации:

def _addShip(self, mass, center, angle = 0.):
    radius = 10

    groupId = self.getNextBodyId() # shapes in the same group do not generate collisions
    body = pymunk.Body(mass, pymunk.moment_for_circle(mass, radius / 10, radius)) # mass, inner radius, outer radius, offset
    body.angle = angle

    partOne = pymunk.Circle(body, radius, center)
    partOne.group = groupId
    partOne.color = THECOLORS['blue']
    partOne.friction = .8

    partTwo = pymunk.Circle(body, radius, (center[0], center[1] + 20))
    partTwo.group = groupId
    partTwo.color = THECOLORS['blue']
    partTwo.friction = .8

    ship = (partOne, partTwo, body)
    self.space.add(*ship)

person Dan Slotman    schedule 21.12.2012    source источник


Ответы (1)


Дерево/хеш столкновений не обновляется сразу, вам нужно сначала сделать шаг вперед. Другой способ обновить данные о столкновениях — вызвать Space.reindex_shape(shape_that_has_been_moved).

См. этот пример:

>>> from pymunk import *
>>> s = Space()
>>> b = Body(1,1)
>>> c1 = Circle(b, 10, (-10,0))
>>> c2 = Circle(b, 10, (10,0))
>>> s.add(b,c1,c2)
>>> s.step(.1)
>>> s.point_query((-15,0))
[<pymunk.Circle object at 0x02264690>]
>>> b.angle
0.0
>>> b.angle = 1.57
>>> s.point_query((-15,0))
[<pymunk.Circle object at 0x02264690>]
>>> s.step(.1)
>>> s.point_query((-15,0))
[]
>>> s.point_query((0,-15))
[<pymunk.Circle object at 0x02264690>]
>>> b.angle = 0
>>> s.point_query((-15,0))
[]
>>> s.reindex_shape(c1)
>>> s.reindex_shape(c2)
>>> s.point_query((-15,0))
[<pymunk.Circle object at 0x02264690>]
person viblo    schedule 22.12.2012