Да, в pymunk 5 фильтр формы стал мощнее (и, как следствие, немного сложнее). Предполагается, что фильтр формы является объектом ShapeFilter
(но см. документацию по API http://www.pymunk.org/en/latest/pymunk.html#pymunk.ShapeFilter для получения подробной информации об этом объекте фильтра.
ShapeFilter
имеет 3 свойства: categories
, mask
и group
. В вашем случае, я думаю, вы хотите поместить плеер в отдельную категорию и замаскировать его из запроса фильтра. (По умолчанию объект фильтра формы соответствует всем категориям и ничего не маскирует).
Итак, вы хотите сделать что-то вроде этого примера:
>>> import pymunk
>>> s = pymunk.Space()
>>> player_b = pymunk.Body(1,1)
>>> player_c = pymunk.Circle(player_b, 10)
>>> s.add(player_b, player_c)
>>>
>>> player_c.filter = pymunk.ShapeFilter(categories=0x1)
>>> s.point_query_nearest((0,0), 0, pymunk.ShapeFilter())
PointQueryInfo(shape=<pymunk.shapes.Circle object at 0x03C07F30>, point=Vec2d(nan, nan), distance=-10.0, gradient=Vec2d(0.0, 1.0))
>>> s.point_query_nearest((0,0), 0, pymunk.ShapeFilter(mask=pymunk.ShapeFilter.ALL_MASKS ^ 0x1))
>>>
>>> other_b = pymunk.Body(1,1)
>>> other_c = pymunk.Circle(other_b, 10)
>>> s.add(other_b, other_c)
>>>
>>> s.point_query_nearest((0,0), 0, pymunk.ShapeFilter(mask=pymunk.ShapeFilter.ALL_MASKS ^ 0x1))
PointQueryInfo(shape=<pymunk.shapes.Circle object at 0x03C070F0>, point=Vec2d(nan, nan), distance=-10.0, gradient=Vec2d(0.0, 1.0))
В файле test_space.py
есть тесты, которые проверяют различные комбинации фильтра формы, которые могут помочь объяснить, как они работают: https://github.com/viblo/pymunk/blob/master/tests/test_space.py#L175
person
viblo
schedule
22.09.2016