![]() |
Колизии на тайловой карте.
С НОВЫМ ГОДОМ!! У меня вопрос, друзья, подскажите, каким образом мне сделать коллизии на тайловой карте?? Просто тупо перебирать список с тайлами и искать координату, которая сколлизилась, ну не знаю - по-моему это не оптимально. Как сделать правильно??
|
Ответ: Колизии на тайловой карте.
смотря что нужно, если нужно узнать в какой клетке находится заданная точка то стоит воспользоватся математическим методом - те каждая клетка тайла описывает какую-то область точек, если поразмышлять над формулами которые генерируют сетку тайла то можно очень просто сделать функцию которая просто будет возращать номер тайла из заданных 2д координат, если надо сделать коллизии между обьектами - думаю стоит использовать деревья для разбивки тайловой карты и узнаем с какими обьектами нужно проверять коллизии для заданого
|
Ответ: Колизии на тайловой карте.
У меня есть тип игрока TPlayer, есть тайловая карта (список с тайлами), есть тип тайла TBRICKTILE. В этом типе есть метод Update, где проверяется, не столкнулся ли игрок с тайлом TBRICKTILE. Делается это примерно вот так вот :
Код:
Method update() Не работает.. Я что-то делаю не так или совсем не в ту сторону копаю?? |
Ответ: Колизии на тайловой карте.
к примеру ты имеешь 2d масив с тайлами, координаты каждого тайла :
Код:
xmin = xpos * 64 собсно имея x,y игрока мы можем найти координаты тайла в масиве и проверяем коллизию игрока только с етим тайлом и\или с тайлами которые его окружают |
Ответ: Колизии на тайловой карте.
Код:
xmin = xpos / 64 |
Ответ: Колизии на тайловой карте.
dimanche13
тайловая клетка может занимать несколько клеток в масиве ? |
Ответ: Колизии на тайловой карте.
Спасибо за советы и ответы, я исправил, сделал немного по-другому и тут еще одна проблема появилась.. Я написал вот это в методе обновления игрока:
Код:
For l:Tlevel = EachIn Levellist Возникла проблемка иного рода.. Теперь когда игрок двигается вправо все происходит нормально, есть коллизия, падает куда надо, но если игрок двигается влево то он начинает падать раньше, чем это нужно.. Примерно на одну клетку.. Вот так вот.. Как можно это исправить?? **Извините, уже нашел решение проблемы в смещении координат, всем спасибо))** |
Часовой пояс GMT +4, время: 18:34. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot