![]() |
Платформер. Как получить ссылку на тайл в текущих координатах
Добрый вечер!
Заранее извиняюсь если подобные темы поднимались, но я долго искал на форуме - не нашел. Пытаюсь разобраться в написании платформера. Вопрос такой: Как получить ссылку на объект (тайл), находящийся под MovieClip'ом персонажа? Нужно для проверки, например, стоит ли персонаж у двери или лестницы. На сцене имеется: 1) gameScreen:MovieClip 1) gameScreen.levelView:MovieClip 2) gameScreen.char:MovieClip Я попытался сделать это проверкой с помощью hitTestObject: У персонажа имеется 4 вспомогательных объекта для определения столкновении с игровым миром (подсмотрено на xitri.com) и каждый экземпляр объекта (например "Дверь") проверят на 4 hitTestObject с персонажем. Код получился оч. большим и в конце сам запутался в нем... Есть ли примеры решения данной задачи? Заранее благодарен! |
DisplayObjectContainer#getObjectsUnderPoint()
Если я правильно понял, у вас не платформер, для которого был приведен пример на xitri, а что-то типа рогалика. В этом случае лучше все-таки сделать модель игрового мира, отвязанную от отображения. Чтобы тайл можно было получить по координатам игрока, не трогая никакие мувиклипы. И чтобы столкновения можно было проверять по этой же модели. |
getObjectsUnderPoint() я пробовал, но... На сцену добавляется лестница из экземпляров объекта класса Stairs_mc, импортированный из CS6. Там нарисовал из прямоугольников тайл лестницы, конвертировал в символ, унаследовал от МувиКлип. getObjectsUnderPoint() возвращает массив из одного объекта типа Shape. В итоге не смог разобраться почему.
Цитата:
Код:
Чтобы тайл можно было получить по координатам игрока, не трогая никакие мувиклипы |
Цитата:
|
Код:
Тем более тут полно вариантов. |
Я написал уже не одну кучу платформеров и могу сказать что нет какого-то одного универсального решения которое бы подходило для всех игр. Приведу парочку на мой взгляд самых рациональных алгоритмов.
1) Т.к все тайлы игрового мира имеют определенную высоту и ширину и скорее всего имеют форму квадрата, то можно просто перебирать все тайлы и сравнивать их с текущими координтами перса. Естественно данный способ не слишком хорош в плане быстродействия. Пути оптимизации следующие: 1) необходимо убирать с экрана те объекты которые не входят на данный момент в поле зрения персонаха 2) сокращать число необходимых проверок. 2) Все игровые тайлы запихиваются в двумерный массив. т.е у нас массив с уровнем назовем его levelArr, в нем еще несколько массивов с блоками в итоге он имеет такой вид. Код AS3:
Код AS3:
Недостатки: Путаница с массивами если у вас по ним мало знаний. |
Код:
Все игровые тайлы запихиваются в двумерный массив. т.е у нас массив с уровнем назовем его levelArr, в нем еще несколько массивов с блоками в итоге он имеет такой вид. |
Bletraut прав насчет универсальности. И выступлю как КО - "А зная, где стоит персонаж, вам максимум надо проверить 9 тайлов" :о)
|
| Часовой пояс GMT +4, время: 13:01. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.