2013-11-19 4 views
6

Я борюсь с внедрением системы обнаружения столкновений через tiledmap. У меня есть 2d «игра покемонов», в которой выведена черепичная карта. В частности, у меня есть слой «столкновения» в моем файле .tmx с файлом в виде плитки, который я хочу взаимодействовать с игроком и другими объектами. Мой вопрос заключается в том, как связать sprite (расширение класса Sprite) с слоем «столкновения» с черепицей и вызвать столкновение между ними. Любые советы приветствуются.Обнаружение столкновения Libgdx с TiledMap

ответ

12

Прежде всего, ваш Player должен, вероятно, не extend Sprite, потому что ваш игрок обычно намного больше, чем Sprite. Вероятно, он состоит из нескольких спрайтов или даже Animations. Храните спрайт в качестве свойства игрока.

Вопрос сам уже был рассмотрен несколько раз. Обычно необходимы следующие шаги:

  1. Найти слой коллизий в вашей карте
  2. Extract все объекты этого слоя
  3. Проверьте каждый из этих объектов для столкновения

В коде это может немного походите на это:

int objectLayerId = 5; 
TiledMapTileLayer collisionObjectLayer = (TiledMapTileLayer)map.getLayers().get(objectLayerId); 
MapObjects objects = collisionObjectLayer.getObjects(); 

// there are several other types, Rectangle is probably the most common one 
for (RectangleMapObject rectangleObject : objects.getByType(RectangleMapObject.class)) { 

    Rectangle rectangle = rectangleObject.getRectangle(); 
    if (Intersector.overlaps(rectangle, player.getRectangle()) { 
     // collision happened 
    } 
} 

Еще некоторые ссылки, которые могут быть заинтересованы:

+0

Я реализовал свой код, но объекты возвращает число 0 и цикл никогда не выполняются. Любая идея о том, от чего это может быть? У меня нет объектов в моем слое, у меня есть слой, который действует как фон, который не требует столкновения, и слой, который действует как плитки, на которые игрок может столкнуться. – bhafenri

+0

Когда вы написали «У меня есть слой« столкновения », я предположил, что для этого был использован слой объектов в TilEd. Вы, вероятно, должны сделать это именно так, потому что вполне удобно моделировать ваши столкновения, а также легко использовать его в коде. При вашем подходе вам придется выполнять итерацию через ваши плитки вместо объектов и создавать прямоугольник самостоятельно для всех плиток в уровне столкновения. Я по-прежнему рекомендую вам использовать слой объекта. – noone

+0

Сделаем, спасибо за помощь! Наконец понял это. – bhafenri

Смежные вопросы