Для эффективного обнаружения столкновений вы захотите использовать нечто, называемое бинарным деревом.По сути, вместо того, чтобы проверять каждый пиксель каждого круга на каждый пиксель каждого круга, вы сначала проверяете, насколько разумно соприкасаться два круга.Это делается путем многократного деления карты на кварталы.Если два круга не находятся даже в одном и том же квадранте экрана, они не будут касаться.
Реализация, однако, сложна, и если вы не намеренно ставите перед собой задачу, используйте библиотеку, чтобы не изобретать велосипед.Вы можете использовать Box2D, физический движок, или Flixel, игровой движок.