|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Apr 2012
Сообщений: 70
|
Платформер. Как получить ссылку на тайл в текущих координатах
Добрый вечер!
Заранее извиняюсь если подобные темы поднимались, но я долго искал на форуме - не нашел. Пытаюсь разобраться в написании платформера. Вопрос такой: Как получить ссылку на объект (тайл), находящийся под MovieClip'ом персонажа? Нужно для проверки, например, стоит ли персонаж у двери или лестницы. На сцене имеется: 1) gameScreen:MovieClip 1) gameScreen.levelView:MovieClip 2) gameScreen.char:MovieClip Я попытался сделать это проверкой с помощью hitTestObject: У персонажа имеется 4 вспомогательных объекта для определения столкновении с игровым миром (подсмотрено на xitri.com) и каждый экземпляр объекта (например "Дверь") проверят на 4 hitTestObject с персонажем. Код получился оч. большим и в конце сам запутался в нем... Есть ли примеры решения данной задачи? Заранее благодарен! |
|
|||||
strange mood
|
DisplayObjectContainer#getObjectsUnderPoint()
Если я правильно понял, у вас не платформер, для которого был приведен пример на xitri, а что-то типа рогалика. В этом случае лучше все-таки сделать модель игрового мира, отвязанную от отображения. Чтобы тайл можно было получить по координатам игрока, не трогая никакие мувиклипы. И чтобы столкновения можно было проверять по этой же модели.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
Регистрация: Apr 2012
Сообщений: 70
|
getObjectsUnderPoint() я пробовал, но... На сцену добавляется лестница из экземпляров объекта класса Stairs_mc, импортированный из CS6. Там нарисовал из прямоугольников тайл лестницы, конвертировал в символ, унаследовал от МувиКлип. getObjectsUnderPoint() возвращает массив из одного объекта типа Shape. В итоге не смог разобраться почему.
Цитата:
т.е. надо будет перебирать массив с объектами игрового мира и сравнивать их координаты с координатами персонажа? в кажом 1-5 кадрах? Как сильно это скажется на быстродействии всего приложения? |
|
|||||
Цитата:
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
Регистрация: Apr 2012
Сообщений: 70
|
|
|
|||||
Я написал уже не одну кучу платформеров и могу сказать что нет какого-то одного универсального решения которое бы подходило для всех игр. Приведу парочку на мой взгляд самых рациональных алгоритмов.
1) Т.к все тайлы игрового мира имеют определенную высоту и ширину и скорее всего имеют форму квадрата, то можно просто перебирать все тайлы и сравнивать их с текущими координтами перса. Естественно данный способ не слишком хорош в плане быстродействия. Пути оптимизации следующие: 1) необходимо убирать с экрана те объекты которые не входят на данный момент в поле зрения персонаха 2) сокращать число необходимых проверок. 2) Все игровые тайлы запихиваются в двумерный массив. т.е у нас массив с уровнем назовем его levelArr, в нем еще несколько массивов с блоками в итоге он имеет такой вид. levelArr = [ row1[block1,block1,block2], row2[block1,block1,block2], row3[block1,block1,block2], ]; Достоинства: Высокая производительность, возможность быстрого доступа к объектам уровня. Недостатки: Путаница с массивами если у вас по ним мало знаний. Последний раз редактировалось Bletraut; 24.04.2013 в 19:17. |
|
|||||
Регистрация: Apr 2012
Сообщений: 70
|
Спасибо большое, как раз начал переделывать под такой способ.
|
Часовой пояс GMT +4, время: 11:44. |
|
« Предыдущая тема | Следующая тема » |
|
|