Я думаю, что вы ошиблись с кодом. Вы просто должны разделить оси X и Y во время сравнения расстояний, если расстояние Y меньше ширины и , расстояние X меньше высоты, чем при столкновении.
Я предполагаю, что позиция - середина объекта, иначе алгоритм был бы намного более сложным. Я также предполагаю, что пуля практически не имеет размера, а x.axis - это ширина, а y.axis - это высота.
Не видя остальной код трудно сказать; -)
Мое предложение:
Vector2 asteroidPosition = asteroidPositions[j];
Vector2 shipPosotion = ship.bullets[i];
float distanceX = Math.Abs(asteroidPosition.X - shipPosotion.X);
float distanceY = Math.Abs(asteroidPosition.Y - shipPosotion.Y);
if ((int)distanceX < asteroidTexture.Width and (int)distanceY < asteroidTexture.Height )
{
score += 20;
asteroidPositions.RemoveAt(j);
j--;
}
Этот код вообще не тестировался, я даже понятия не имею, на каком языке это на самом деле. Так что просто примите это как вдохновение. Надеюсь, это сработает.
P.S .: Если вам интересно, я мог бы выслать вам исходный код какой-нибудь игры со стрельбой по астероидам, которую я делал недавно, чтобы изучить ее ...