Мне нужно, чтобы алгоритм 2D-обнаружения столкновений был масштабируемым, но я боюсь, что это не так. Мой алгоритм делает это:
Создан LinkedList объектов спрайта (который включает в себя все их данные)
private LinkedList<Sprite> collisionSpritesList = new LinkedList<Sprite>();
Затем основной игровой цикл добавляет все спрайты в LinkedList:
public void GameUpdate()
{
collisionSpritesList.add(avatar);
collisionSpritesList.add(enemy1);
collisionSpritesList.add(enemy2);
}
Затем вызывается метод collisionCheck()
; он циклически перебирает все пары объектов в списке в поисках коллизии. Затем LinkedList полностью стирается. Это потому, что сущности должны быть обновлены с их новыми местоположениями.
public boolean checkCollision ()
{
for(int i = 0; i < collisionSpritesList.size(); i++)
{
for(int j = 0; j < collisionSpritesList.size(); j++)
{
if(i != j)
{
if(collisionSpritesList.get(i).getRectangle().intersects(collisionSpritesList.get(j).getRectangle()))
{
Point p = gridMap.getRandomWalkableLocation();
collisionSpritesList.get(j).setLocation(p.x * gridMap.getCellSize(), p.y * gridMap.getCellSize());
collisionSpritesList.clear();
return true;
}
}
}
}
collisionSpritesList.clear();
return false;
}
Мой вопрос: насколько эффективен этот способ проверки столкновения? Должно ли это быть сделано по-другому? Если да, то какие методы являются масштабируемыми?