У меня была действительно озадачивающая медленная проблема с игрой, над которой я работаю, вероятно, потому что я не уверен, как обрабатывать графику (скорее всего, ответственную за замедление) в javascript, не используя стороннюю структуру, такую как Phaser/ImapactJS/EaselJS и т. Д.) *. Ниже приведена нижняя часть того, как я приближаюсь к своей графике. Я был бы очень благодарен за некоторые советы или методы, как это сделать правильно.Разработка игры на JavaScript-холсте
- Моя игра плитка основе - с использованием плитки, разработанные на 500x500 пикс , потому что я хочу, чтобы отобразить прилично на устройствах с высоким разрешением.
- Я использую spritesheet для загрузки всех (большинства) моих плит до запуска основного цикла. Это изображение примерно 4000 x 4000 (поддерживая его ниже 4096, потому что размер текстуры для графических процессоров больше, чем этот).
- Затем я использую функцию drawImage для циклического перехода и рисования каждой плитки на части холста с использованием информации (w, h, x, y), хранящейся в массиве плитки. Я делаю это в каждом цикле основного цикла, используя мою функцию drawMap.
- Карта в настоящее время 6x6 плиток размером
- Символьный спрайт также загружается и наносится на холст после того, как карта была нарисована. Символ отображает другой кадр анимации в каждом цикле основного цикла. Есть множество анимаций для символа, каждый из которых содержится в одном и том же спрайте.
- Спрайт лист символов примерно 4000x3500
- Символ примерно 350x250 PX
Другие объекты также использовать один и тот же лист спрайтов. В настоящее время существует только один объект.
Возможно полезные вопросы:
я использую слишком много spritesheets или слишком мало?
- Должен ли я рисовать что-либо только в том случае, если его координаты находятся в границах экрана?
- Как мне организовать сбор мусора? Нужно ли устанавливать объекты изображений в null, когда они больше не используются?
Заранее благодарим за ввод. Я просто хотел бы знать, правильно ли я поеду и забрать мозги, как ускорить его.
* Обратите внимание, что я планирую перенести игру JS в cocoonJS, которая обеспечивает ускорение графики для элемента canvas на мобильном устройстве.
** Если вас интересует, пожалуйста, посетите мой Patreon page для удовольствия!
Я могу сказать вам, что вы должны нарисовать только то, что видно на экране. – pietrovismara
@Cuz Я думал, что это может немного замедлить его, но насколько я знаю, элемент canvas не тратит время на рендеринг чего-либо за его пределами. Хотя я мог ошибаться. –