![]() |
Карта игры
Добрый день. Много времени думаю над вопросом как сделать карту для игры (2d, вид сверху), чтобы было наиболее практично и наименее затратно. Проверка столкновения с объектами должна происходить именно по ней. Изначально делал вовсе без карты, потом заметил, что при большом колличестве объектов проверять в цикле все условия затрудеительно. Пробовал сделать карту из матрицы, но тут тоже проблема, думаю до больших размеров ее не получится увеличить (много будет есть двухмерный массив 1000x1000) Надеюсь кто-нибудь сможет предложить лучшие способы. Заранее спасибо.
|
Цитата:
если вас волнует проверка столкновений - попробуйте посмотреть исходники фрэймворков которые это умею делать, например flixel или box2d очень слабо понятно что у вас за игра, поэтому невозможно дать вразумительный совет, но я попробую ткнуть пальцем в небо: что если вместо массива использовать BitmapData и цветом кодировать разные состояния пикселй-клеток? |
Цитата:
Как бы поделить игровое поле на квадратики, скажем 20х20, и для каждой клетки в редакторе карт задать значение (это можно сделать создав, например, инструмент рисования препятствий и т.п.). В итоге должен получиться массив на подобие такого: Код AS3:
Далее при перемещении персонажа брать его положение по x делить на 20 и округлять до меньшего целого, таким образом получая индекс в каком-либо из вложенных массивов, а разделив положение по y на 20 и округлив, так же, до меньшего целого, индекс вложенного массива представляющего ряды. т.е. потом просто создать функцию, которая будет на основе этих координат возвращать необходимое значение из нужного вложенного массива, 0 или 1. Вернет один - персонаж идет в это положение, 0 - останавливается. Подобные сетки проходимости довольно часто применяются. Надеюсь идея понятна Цитата:
Сложновато это для новичка. А учитывая что бокс2д это еще и порт с С++, в котором не соблюдаются никакие конвенции АС3, задача еще неоднократно усложняется. Да для такой игры, в общем-то, даже SAT использовать нет необходимости, не говоря уже про физику. Цитата:
|
Возможно я неправильно начал. Сама игра клиент-серверная аркада(персонаж, монстры и т д проходится вместе), и сама карта должна быть соответсвенно на сервере. Матрица не подходит почему, потому что если есть объект, значит он должен быть в этой матрице подкаким-нибудь id например, чтобы узнать, что это за объект. А сама карта должна быть, как я уже говорил по 1000x1000 пикселей (хотя хотеось бы и больше). Сам раньше делал тот вариант, что предложили, правда с делением на 5, но опять же размер получается большой и меня это настараживает.
|
Карта делится на области, напимер 100 на 100 пикселей. Каждый объект входит в 1 зону и проверяется на столкновение с объектами из соседних зон и своей собстенной. Т.е. всего проверяется 9 зон. Размер зоны определяется как максимально возможная длина объекта.
Если есть ещё и статика (просто карта проходимости, не объекты) - можно её отдельно положить и проверять каждый объект с ней. Формат карты проходимости при этом зависит уже от того, что за игра. |
Неплохой вариант, спасибо. Если не будет еще что-нибудь более интересного буду использовать это))
|
| Часовой пояс GMT +4, время: 15:49. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.