我試圖從我的玩家的位置開始檢測沿着一段的第一個形狀,但我不想檢測到玩家。pymunk更新了形狀過濾器的使用
在以前版本的pymunk中,pymunk.Space.segment_query_first函數接受一個整數作爲shape_filter,它只能檢測到該整數組中的形狀。這工作完美,但現在它接受一個列表或字典。我試圖把整數放入一個列表中,但沒有奏效。我不知道它用字典需要什麼。我嘗試了所有我能想到的。似乎沒有任何東西阻止它檢測到我的播放器。該文檔根本沒有幫助。提前致謝。
我試圖從我的玩家的位置開始檢測沿着一段的第一個形狀,但我不想檢測到玩家。pymunk更新了形狀過濾器的使用
在以前版本的pymunk中,pymunk.Space.segment_query_first函數接受一個整數作爲shape_filter,它只能檢測到該整數組中的形狀。這工作完美,但現在它接受一個列表或字典。我試圖把整數放入一個列表中,但沒有奏效。我不知道它用字典需要什麼。我嘗試了所有我能想到的。似乎沒有任何東西阻止它檢測到我的播放器。該文檔根本沒有幫助。提前致謝。
是的形狀過濾器在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
我想它outshape.filter = [INT] –
我無意中張貼最後的評論,我似乎無法刪除它:/我想通了,我只是將player_shape.filter設置爲[1],並將[1]傳遞給shape_filter參數。如果兩個列表之間有任何共同的數字,它似乎忽略了碰撞。如果有人想解釋如何在這裏使用字典而不是列表,我仍然感興趣。 –