баги

Правки последних дней.

Ну во-первых была проведена работа на сундуками и ключами, теперь добавлены графические изображения ключей, а также решено что самый дешевый ключ - ржавый. Более дорогой металлический, затем золотой, кристаллический и магический. Но будет еще один очень редкий ключ.

Затем наших художником была нарисована новая панель при открытии сундука, также изменилось и поведение геймплея, теперь можно будет забрать все вещи скопом.

В основном велась работа над ошибками и поиском багов, найдены проблемы с инвентарем (вернее с ее переполнением).

Небольшие изменения – большие мучения

Итак:

  • Пофиксен баг бесконечным боезапасом стрел – если игрок проигрывал на арене, его количество стрел было равное количеству стрел перед боем
  • Пофиксен баг – с длинным ходом – когда герой никуда не шел. Ошибка была, в том что игрок ориентировался по своей внутренней карте, а не по настоящей – это было сделано для мобов – пришлось делать ветку.
    Правда получилась некая рассинхронизация показа пути и реального перемещения. Тянуть на клиента алгоритм обхода препятствий – глупо. Наверное будем менять указания маршрута (например установка флажка или типа того)

Тестирование

Еще порция глюков. Первый из них не загрузка героя, но запуск игры.

Вообще в игре все объекты грузятся через специальный класс, который увеличивает по мере загрузки счетчик на один, а после успешной загрузки уменьшает его на единицу и только при 100% загрузке игрового поля (_root.getBytesLoaded = _root.getBytesTotal) и при счетчике загрузок = 0 переключается на другой фрейм (play), а до этого топчемся на фрейме загрузки.

Т.е. вроде без загрузки- нет игры, но что-то пошло не так. Это выясняем.

Борьба с сервером. Часть вторая

Целый день потратил на поиск ошибок, нашлось куча мелких багов, но ситуация с окном, не прояснялась.

Уже столько всего выводил в лог – что при запуске сервера лог пух на почти мегабайт от каждого действия.

Нашлось случайно – решил проверить на локальном сервере (под Windows) – оказалась та-же самая ошибка с прорисовкой, причем появлялась она тоже не каждый раз – была плавающей.

Опять цвета и как можно все испортить

Делаем новый чат и сейчас понадобились цвета, вообще история с чатом и цветами имеет самые долгие корни, но как выяснилось – увы, но это не то что надо.

Цвета – были ужасно похожими очень многие, а потому была составлена вручную палитра цветов (пока 50 штук), для героев.
Было сделана передача в клиент, цвета героя (определяется порядковым номером в лабиринте, тупо позицией в векторе m->creatures.

Передача осуществляется как и другие параметры, при запросе getinfo.

Работа над ошибками

В чем минус эволюционной разработки?

Эволюционная разработка - работа над проектом волнами, когда один блок заменяется другим. Для более быстрой проверки работоспособности создаются заглушки или код на первое время

Минус в том, что могут появляется ошибки(глюки) на стыке двух модулей, т.е. по отдельности они нормально работают, а вот их объединили - и не работают оба.

В моем случае - появился глюк при исполнении команды retreat. Команда выполнялась в случае гибели персонажа или его победы в лабиринте (выполнения условий).

Косяки

Когда начал делать арену, понял какой ужасный код получился и сколько в нем косяков и багов.

Во-первых пришлось срочно добавить переменную очередности - чтоб клиент знал, кто сейчас ходит.
Во-вторых у при получение данных о существе если это был игрок (id>10000) то второму игроку не передавалось его HP, а у меня было повязано на это условие - нет HP - не показывался персонаж (считалось что он уже умер)

Но самый главный косяк и не продуманность была в getaction - получении и обработки команд с сервера.

Интеграция

Нарисовал героя и даже сделав для него анимацию, попытался прикрутить его в основной проект.
Для начала пришлось все-таки переписать загрузчик для SWF, теперь он сразу создает нужный клип, название которого приходит ему качестве параметра: function loadclipfromserver(path, loadname,nameclip).

Затем пришлось в структуру(объект) creature добавить mcname,dx,dy,и все другие параметры для анимации
Теперь в функции moveCreature не сразу присваиваются _x и _y, а выполняется ряд действий (может и избыточных, но пока нужных)

Flash - loadMovie vs duplicateMovieClip

Сегодня целый день решил потратить на код. Целый день пошел коту под хвост.

Решил сделать загружаемые объекты, а именно начал делать яму-ловушку при попадании в которую следует смерть (а вы как думали?).
Сделал в виде отдельного SWF и поместил в загружаемую папку. У меня загрузка/отрисовка карты сделана через attachMovie, т.е. объекты создаются как instance (копий) с именами от id в библиотеке.

Баги vs Тупизм

В начале субботний день не предвещал ничего плохого, решил я переписать код клиента чтобы разнести на различные уровни глубины различные объекты, чтобы преступить к отрисовки "пола".

Итак решено sm = w*h, значит
0...sm-1 - пол
sm..sm+100 - для эффектов (например для отрисовки пути)
2*sm+101 .. 3*sm+100 - объекты (стены и т.п.)
3*sm+101 - hero (и другие существа)
4*sm+101 5*sm+102 - фон закрытой территории.

RSS-материал