В своих проектах я использую три типа – пересечение прямоугольников (наиболее быстрый, но и наименее точный), пересечение окружностей / пересечение окружности и прямоугольника (относительно быстрый и точный), по-пиксельный тест (наиболее медленный, но самый точный). Последний вариант можно ускорить путем упрощения модели – за точку брать несколько точек (2х2, 3х3, 4х4, …). Точность все еще останется достаточно высокой, а вот скорость возрастает во много раз.
В качестве примера и отправной точки привожу готовый набор функций. Collision Detection – это не самый быстрый вариант, но и далеко не самый худший.
На основе этого примера легко создать свои варианты.