slembcke / Chipmunk2D

A fast and lightweight 2D game physics library.
http://chipmunk2d.net
MIT License
2.21k stars 352 forks source link

How to remove CollisionHandler? #204

Closed tasptz closed 3 years ago

tasptz commented 3 years ago

Seems there was a cpSpaceRemoveCollisionHandler at some point, but not anymore.

slembcke commented 3 years ago

Removing collision handlers always had a lot of issues. There were a lot of questions like: "Should separate functions still be called after removing a handler?" The answer often depended on the use case. In some cases, people expected begin/separate events to always be matched, and in others they were removing the handler because they wanted to cancel the separate callback. It got even more complicated when adding the wildcard handlers, and I decided to axe the remove function,

So this is actually poorly documented, but cpSpaceAddCollisionHandler returns the handler for that collision pair type, and only creates a new one if it doesn't already exist. So if you want to remove a collision handler, you can simply replace the callbacks with do-nothing functions or copy the default handler over the top of it. This means that it's up to you to decide the behavior you want and those unanswerable questions can answer themselves.