Phaser - полезные советы

Часть 34: Как разбить код и бесплатная альтернатива TexturePacker — ShoeBox

Я с первого дня обратил внимание, что в TexturePacker есть возможность задать отступы вокруг спраита, но не понял, зачем и кому они могут понадобится. Как оказалось это критично и вот почему. При анимации размера спраита (scale), размер округляется. По этой причине Phaser иногда берет полоску толщиной в один пиксель из нижестоящего спраита (в моем случае это была красная кнопка неправильного ответа, по этому я и заметил баг). Для этого я добавил по 3 точки пустоты между всеми спраитами.

Пока я работал с TexturePacker-ом, я обнаружил, что важная для меня функция «удаления повторяющихся спраитов» доступна только в платной версии. На помощь пришел Элспер (не забываем сказать спасибо), которые прочитав пост о TexturePacker-е, поделился своей программой. Он использует программу ShoeBox, которая делает все, что умеет TexturePacker, но бесплатно!

Программа ShoeBox для генерации атласа изображений БЕСПЛАТНО

Поговорив с автором ShoeBox, я узнал что он ранее тоже использовал TexturePacker, но он хотел иметь больше контроля над форматом конечного файла, по этому и создал ShoeBox. Программа очень удобная и полезная (она даже умеет делать BitmapFont, который я пока еще не освоил), но учитывая мой формат ID спраита (который включает название папки, что бы структуризировать контент сцен) ShoeBox мне пока не подходит.

Помните, карту с вопросом для урока изучения слов я сделать на базе Tiled. Так вот, лучше так не делать =) Хоть и выглядит заманчиво, но на практике все усложняет. Я решил использовать TileMap только для сцен, а вот отдельные элементы интерфейса делать вручную (при необходимости используя фиксированные числа для координат).

По отношению к классам я тоже сделал умозаключения. Элементы интерфейса не всегда надо реализовывать в виде класса. Мне кажется есть две причины прибегать к ним:

1) Если элемент интерфейса будет хотя бы один раз повторно использоваться в игре (в этой или следующей).
2) Если код элемента слишком большой (что бы он не путался с кодом самой игры)

По этой причине, меню прогресса игры (желтые кружочки под карточкой с вопросом) я не стал делать в виде отдельного класса. Ведь весь функционал сводится к отображению активной карты и на какие карточки был дан правильный или не правильный ответ.

Стоит обратить ваше внимание на свойство спраита exists. При рефакторинге, у меня магическим образом перестала анимированно удаляться карточка (на которую я ответил правильно). После нудного дебагинга (а мой мозг уже отказывался думать) и А/Б тестов, нашел причину. Оказалось, задав свойство exists = false, Phaser перестает ее рисовать на сцене (хотя объект не уничтожен и она не удалена со сцены). Я же использовал это свойство, что бы пометить для себя карту-кандидат на удаление (само удаление происходило автоматом, по завершении анимации выхода карты со сцены). Странно, что этот же код раньше работал без ошибок…

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *