Как уже говорили другие, делайте это в объектной модели, а не в графике.
Для одной простой модели присвойте каждому объекту размер, отличный от пули. Затем проверяйте, находится ли местоположение пули в пределах радиуса этого объекта каждый тик. В псевдокоде:
for each bullet
for each hittableObjectInWorld
if ([hittableObject isTouchedBy:bullet]) {/*handle collision*/}
endFor
endFor
hittableObject::isTouchedBy:(Sprite *)otherObject {
xDistance = [self x] - otherObject.x;
yDistance = [self y] - otherObject.y;
totalDistance = sqrt((xDistance*xDistance) + (yDistance*yDistance));
if (totalDistance <= [self size]) return YES;
else return NO;
}
Теперь у вас есть простая система обнаружения столкновений. Здесь есть некоторые абстракции: мы воспринимаем каждый удаляемый объект, как если бы он был в форме сферы с радиусом в «размере». Пули очень малы, но вы можете исправить это, добавив радиус пули к радиусу каждого из объектов, которые могут быть хитовыми, и таким образом математика будет бегать чуть быстрее.
Возможно, это самая простая из возможных систем обнаружения столкновений. Здесь много возможностей для улучшения. Главное, что вы выполняете количество пуль, умноженное на количество проверяемых объектов, проверяемых на каждый тик. Если у вас в мире много пуль и много объектов, это может занять много процессорного времени. Есть много видов хаков, чтобы сократить количество проверок, которые вы должны сделать. Если у вас возникли проблемы со скоростью в этой версии, это следующее, что нужно начать настраивать.
Удачи!