Да фильтр формы стал более мощным в pymunk 5 (и в результате также немного сложнее). Фильтр формы должен быть ShapeFilter
объекта (но см АНИ документы 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
Я понял это outshape.filter = [Int] –
я случайно разместил, что последнее замечание, и я наклоняюсь, кажется, удалите его:/Я понял, я просто установил player_shape.filter в [1] и передал [1] аргументу shape_filter. Если между этими двумя списками есть общие номера, это, как представляется, игнорирует столкновение. Если кто-то хочет объяснить, как использовать словарь здесь вместо списка, мне все равно интересно. –