SlideShare a Scribd company logo
1 of 46
Download to read offline
Попасть в мишень
Как создавалась мини-игра "Тир удачи"
Тир удачи Pointblank
попробовать игру можно по адресу:
4ga.me/pb_shooting
Что же такого особенного в
этой игре?
•

Работоспособность во всех поддерживаемых
браузерах (IE9+, Opera, Chrome, FF)

•

Эффект DoF и Motion Blur у фона и мишеней

•

Загрузка ресурсов и отображение процесса
подготовки игры

•

Работа со звуками: стрельба, попадание в
мишень и т.д.
Пора выбрать сторону!
Или на каких технологиях мы это будем
реализовывать?
Работа с
изображением
Работа с изображением
•

html5 + css3	

•

canvas	

•

webgl
html5 + css3
✓

Простота разработки – много библиотек анимации

✓

3D трансформации поддерживаются почти везде (caniuse.com/
transforms3d)

✓

Высокая производительность при выносе отрисовки на GPU (3D
трансформации)

✕

Фильтры работают лишь в webkit (caniuse.com/css-filters)

✕

Большая деградация производительности в браузерах без
поддержки 3D трансформаций

✕

Отсутствие субпиксельного позиционирования без 3D
трансформаций
html5 + css3
API

Community

Features

Perf

5

5

5

2

1

3

$.transit

Docs

2

3

5

4+

5

5

2

1

5
canvas
✓

Простота разработки – много библиотек анимации

✓

Работает везде начиная с IE9 (caniuse.com/canvas)

✓

Поддерживает субпиксельное позиционирование

✓

Позволяет делать любые манипуляции с
изображениями (фильтры и т.д.)

✕

Любые манипуляции с изображениями очень
трудозатратны

✕

Не поддерживает 3D трансформации изображений
canvas
API

Docs

Community

Features

Perf

Fabric.js

3

3

1

3

1

Raphael.js

3

4

5

2

2

KineticJS

3

2

3

3

3

EaselJS

4

4

4

5

5

pixi.js*

4

4

3

3

4

* – режим canvas рендеринга, когда webgl не поддерживается
webgl
✓

Высокая производительность при работе с изображениями

✓

Поддержка производительных фильтров и трансформаций

✓

Огромный API для работы с 3D сценой, поверхностями и
текстурами

✕

Не достаточная доля браузеров поддерживает работу с webgl
(caniuse.com/webgl)

✕

Сложная разработка. Имеются библиотеки, но их документации
оставляют желать лучшего

✕

Код, оптимизированный под webgl при деградации на canvas, в
старых браузерах получается малопроизводительным
webgl
API

Docs

Community

Features

Perf

three.js*

2

5

5

4

5

pixi.js

5

4

3

2

5

* – не поддерживает работу со спрайтами
Update!
14 января 2013г в EaselJS добавлена
экспериментальная высокопроизводительная
поддержка webgl
Высокоуровневый API ограничен, но прирост
производительности очень высок.
Разработкой webgl рендера занимаются
совместно @gskinner и Mozilla
Приз зрительских
симпатий был отдан
реализации на canvas
Из-за малой доли поддержки webgl в браузерах на октябрь-ноябрь 2013,
а так же расширенных возможностей необходимых для поставленной задачи
После исследований выбор
пал на набор библиотек
под названием CreateJS
И библиотеку для работы с графикой – EaselJS
(https://github.com/CreateJS/EaselJS)
Но конечно же все оказалось не так
просто...
Первая версия
proof of concept
•

1 canvas – все сцены отрисовываются на нем

•

Фильтры motion-blur накладываемые в
реальном времени

•

Изменение течения времени (эффект slow-mo)
за счет изменения количества кадров
В результате
рекордные 4 fps
Для улиток может и сойдет, но что-то с этим нужно
делать
Что же было сделано?
•

Сцены разделены на несколько слоев

•

Таймер заменен на requestAnimationFrame

•

Сделана предгенерация motion-blur для
элементов

•

Режим slow-mo переделан со смены fps на
менеджер анимаций
Разделение сцен на слои
•

Позволяет проще
контролировать отрисовку
элементов на разных сценах

•

Позволяет сократить цикл
отрисовки финальной сцены

•

Когда сцену не видно ее
просчет можно совсем
исключить из цикла
рендеринга
Алгоритм работы motion-blur кеша
Менеджер анимаций
•

Все анимации переделаны на использование простой
формулы S = V*t

•

Менеджер предоставляет именную коллекцию t для
вышеописанной формулы

•

При включении режима slow-mo все записи в коллекции
переумножаются на фактор замедления, что приводит к
замедлению скорости элементов без изменения fps

•

Позволяет делать плавный переход от одной скорости к
другой для заданной записи
В результате
получаем 50-60 fps
Уже не стыдно показать!
Но просадки fps очень режут глаз
Продолжаем
оптимизировать дальше!

•

Вынесение статичных текстур в DOM

•

Оптимизация цикла отрисовки мишеней
Вынесение статичных
текстур в DOM
•

Текстуры не имеющие никакие анимации или
трансформации выносим в DOM элементы

•

Применяем к этим элементам 3D
трансформации для реализации плавного
перемещения с субпиксельным смещением

•

В браузерах, что не поддерживают 3D
трансформации, деградируем до обычного
смещения за счет стилей
Оптимизация цикла
отрисовки
•

Все элементы, что не видны пользователю
помечаем, как невидимые тем самым они
исключаются из цикла отрисовки

•

Для отрисовки обратной стороны мишеней
используем один и тот же canvas с изображением

•

Удаляем невидимую сторону мишени со сцены,
чтобы она никак не участвовала в цикле отрисовки

•

На сценах у которых используется фон не очищаем
canvas перед отрисовкой
В результате получаем
стабильные 60 fps
В результате получаем
•

В Google Chrome и Opera Next – стабильные
60 fps)

•

Firefox – 59-60 fps. Под нагрузкой на браузер
имеются кратковременные просадки на 1-2
fps)

•

Safari – 57-60 fps. Что выливается в
неприятные кратковременные фризы
анимаций
Update
После анонса поддержки webgl в EaselJS ситуация
значительно изменилась
Результаты с webgl
•

В Google Chrome и Opera Next – стабильные
60 fps)

•

Firefox – стабильные 60 fps)

•

Safari – Ситуация не изменилась. Поддержка
webgl по умолчанию заблокирована
Загрузка ресурсов и
отображение процесса
подготовки игры
Что должен уметь делать
загрузчик?
•

Загружать разные форматы файлов:
изображения и звуки

•

Предоставлять информацию по текущему
статусу загрузки

•

Позволять обрабатывать ошибки загрузки
файлов
Все это умеет делать
загрузчик PreloadJS
Входящий в комплект CreateJS
(https://github.com/CreateJS/PreloadJS)
Так почему не что-то
другое?
Чем же PreloadJS лучше?
•

Работа с XHR2 для отображения реального
процесса загрузки с поддержкой фоллбеков

•

Возможность параллельной загрузки с
поддержкой очередей

•

Поддержка плагинов. Есть плагин
постобработки звуковых файлов для работы с
библиотекой SoundJS

•

Хорошая документация и открытый API
Процесс подготовки
игры
Для отображения процесса создания motion-blur кеша
придется доработать загрузчик
Как это было сделано
•

Создан класс Loader, который позволяет
добавлять в очередь загрузки PreloadJS
кастомные записи

•

Перед созданием motion-blur кеша добавляем
равное количеству элементов записи в очередь
загрузки

•

После создания кеша для элемента отстреливаем
событие готовности, что переключает очередь
загрузки будто мы загрузили файл
Готово!
Таким образом, в процесс отображения 100% входит, как
загрузка файлов, так и подготовка всех элементов игры
Работа со звуком
Какие требования к работе
со звуком?
•

Воспроизведение одного или нескольких
звуков одновременно

•

Кроссбраузерное воспроизведение звуков

•

Минимальный контроль за воспроизведением:
проигрывание, пауза
Даешь библиотеку для
облегчения жизни!
А есть ли что-нибудь в наборе CreateJS для работы со
звуками?
Как оказалось есть!
Встречаем SoundJS!
(https://github.com/CreateJS/SoundJS)
Но всех проблем это не
решило :(
•

В IE 9 есть небольшая задержка перед проигрыванием
звуков

•

Если в Windows не настроен WMP, то звуки в IE
воспроизводиться вообще не будут.

•

При включении Web Audio API в Firefox 25 перестали
воспроизводиться все звуки. Было исправлено
обновлением SoundJS

•

В Firefox 25 на всех Windows машинах mp3 файлы не
загружались корректно. Было исправлено в новой
версии Firefox
Что хотелось, но не
получилось...
Не получилось реализовать

•

Разворот мишеней с настоящей 3d
перспективой. Будет возможно в webgl
версии

•

Правдоподобный дым от выстрелов
Выводы

More Related Content

What's hot

Архитектура современного 3 d движка: Разработка Xenus: Точка кипения
Архитектура современного 3 d движка: Разработка Xenus: Точка кипенияАрхитектура современного 3 d движка: Разработка Xenus: Точка кипения
Архитектура современного 3 d движка: Разработка Xenus: Точка кипенияRoman_Lut
 
сервис нагрузочного тестирования Ddosme.ru, иван самсонов
сервис нагрузочного тестирования Ddosme.ru, иван самсоновсервис нагрузочного тестирования Ddosme.ru, иван самсонов
сервис нагрузочного тестирования Ddosme.ru, иван самсоновOntico
 
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают..."Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...Egor Petrov
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр КолесеньIT Share
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLAlex Chistyakov
 
Podlodka i os crew 8
Podlodka i os crew 8Podlodka i os crew 8
Podlodka i os crew 8ssuser2062cc
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012Alex Chistyakov
 
Salt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systemsSalt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systemsAlex Chistyakov
 
Performance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskPerformance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskAlex Chistyakov
 
Оптимизируем скорость загрузки страницы
Оптимизируем скорость загрузки страницыОптимизируем скорость загрузки страницы
Оптимизируем скорость загрузки страницыSlava Aliev
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonAndrey Smirnov
 
Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияYandex
 
VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?Anton Zhbankov
 
ESXi 5.x CPU scheduler
ESXi 5.x CPU schedulerESXi 5.x CPU scheduler
ESXi 5.x CPU schedulerAnton Zhbankov
 
UI, сделай мне хорошо
UI, сделай мне хорошоUI, сделай мне хорошо
UI, сделай мне хорошоssuser2062cc
 

What's hot (19)

Архитектура современного 3 d движка: Разработка Xenus: Точка кипения
Архитектура современного 3 d движка: Разработка Xenus: Точка кипенияАрхитектура современного 3 d движка: Разработка Xenus: Точка кипения
Архитектура современного 3 d движка: Разработка Xenus: Точка кипения
 
сервис нагрузочного тестирования Ddosme.ru, иван самсонов
сервис нагрузочного тестирования Ddosme.ru, иван самсоновсервис нагрузочного тестирования Ddosme.ru, иван самсонов
сервис нагрузочного тестирования Ddosme.ru, иван самсонов
 
Применяем Ansible
Применяем AnsibleПрименяем Ansible
Применяем Ansible
 
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают..."Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
 
Podlodka i os crew 8
Podlodka i os crew 8Podlodka i os crew 8
Podlodka i os crew 8
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012
 
Salt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systemsSalt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systems
 
Performance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskPerformance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon Saransk
 
Управление версиями TFS 2010
Управление версиями TFS 2010Управление версиями TFS 2010
Управление версиями TFS 2010
 
Управление версиями в TFS 2008
Управление версиями в TFS 2008Управление версиями в TFS 2008
Управление версиями в TFS 2008
 
Оптимизируем скорость загрузки страницы
Оптимизируем скорость загрузки страницыОптимизируем скорость загрузки страницы
Оптимизируем скорость загрузки страницы
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестирования
 
VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?
 
ESXi 5.x CPU scheduler
ESXi 5.x CPU schedulerESXi 5.x CPU scheduler
ESXi 5.x CPU scheduler
 
Drupal conf2011 2_kolosov
Drupal conf2011 2_kolosovDrupal conf2011 2_kolosov
Drupal conf2011 2_kolosov
 
UI, сделай мне хорошо
UI, сделай мне хорошоUI, сделай мне хорошо
UI, сделай мне хорошо
 

Viewers also liked

Geo final project
Geo final projectGeo final project
Geo final projectgbcm0920
 
Product Catalog - Network and Web Enabled Devices
Product Catalog - Network and Web Enabled DevicesProduct Catalog - Network and Web Enabled Devices
Product Catalog - Network and Web Enabled DevicesUptime Devices
 
Linked in presentaion
Linked in presentaionLinked in presentaion
Linked in presentaionrivkaf
 
Uptime Devices - Network and Web Enabled Technologies
Uptime Devices - Network and Web Enabled TechnologiesUptime Devices - Network and Web Enabled Technologies
Uptime Devices - Network and Web Enabled TechnologiesUptime Devices
 
P ythagorean and his theorem
P ythagorean and his theoremP ythagorean and his theorem
P ythagorean and his theoremmatt_hicks
 
Buat logo fersi kelompok 6
Buat logo fersi kelompok 6Buat logo fersi kelompok 6
Buat logo fersi kelompok 6nopryadi
 
Geo final project
Geo final projectGeo final project
Geo final projectgbcm0920
 
Marketing 521 Team Marketing Plan Final Draft_2012-11-27
Marketing 521 Team Marketing Plan Final Draft_2012-11-27Marketing 521 Team Marketing Plan Final Draft_2012-11-27
Marketing 521 Team Marketing Plan Final Draft_2012-11-27Anthony Lee
 
IEC Conference 2011 - Literacy/Maths/High Challenge-High Support
IEC Conference 2011 - Literacy/Maths/High Challenge-High SupportIEC Conference 2011 - Literacy/Maths/High Challenge-High Support
IEC Conference 2011 - Literacy/Maths/High Challenge-High SupportMarsden IEC
 
Comunicacion 131025124929-phpapp01
Comunicacion 131025124929-phpapp01Comunicacion 131025124929-phpapp01
Comunicacion 131025124929-phpapp01Jonathan Jiim
 
Revit Screenshots
Revit ScreenshotsRevit Screenshots
Revit ScreenshotsTim West
 
Lasnuevasredessociales¿modaorevolucion?
Lasnuevasredessociales¿modaorevolucion?Lasnuevasredessociales¿modaorevolucion?
Lasnuevasredessociales¿modaorevolucion?Yesii Morales
 
Reference - Biogen
Reference - BiogenReference - Biogen
Reference - BiogenDiana Pearce
 
Paradigmas na Educação
Paradigmas na EducaçãoParadigmas na Educação
Paradigmas na Educaçãocleite
 

Viewers also liked (20)

Geo final project
Geo final projectGeo final project
Geo final project
 
Product Catalog - Network and Web Enabled Devices
Product Catalog - Network and Web Enabled DevicesProduct Catalog - Network and Web Enabled Devices
Product Catalog - Network and Web Enabled Devices
 
Linked in presentaion
Linked in presentaionLinked in presentaion
Linked in presentaion
 
Uptime Devices - Network and Web Enabled Technologies
Uptime Devices - Network and Web Enabled TechnologiesUptime Devices - Network and Web Enabled Technologies
Uptime Devices - Network and Web Enabled Technologies
 
LogiExcel - Complete Logistics Solution
LogiExcel -  Complete Logistics SolutionLogiExcel -  Complete Logistics Solution
LogiExcel - Complete Logistics Solution
 
P ythagorean and his theorem
P ythagorean and his theoremP ythagorean and his theorem
P ythagorean and his theorem
 
Buat logo fersi kelompok 6
Buat logo fersi kelompok 6Buat logo fersi kelompok 6
Buat logo fersi kelompok 6
 
Geo final project
Geo final projectGeo final project
Geo final project
 
Marketing 521 Team Marketing Plan Final Draft_2012-11-27
Marketing 521 Team Marketing Plan Final Draft_2012-11-27Marketing 521 Team Marketing Plan Final Draft_2012-11-27
Marketing 521 Team Marketing Plan Final Draft_2012-11-27
 
IEC Conference 2011 - Literacy/Maths/High Challenge-High Support
IEC Conference 2011 - Literacy/Maths/High Challenge-High SupportIEC Conference 2011 - Literacy/Maths/High Challenge-High Support
IEC Conference 2011 - Literacy/Maths/High Challenge-High Support
 
LogiExcel : Complete Logistics Solution
LogiExcel : Complete Logistics SolutionLogiExcel : Complete Logistics Solution
LogiExcel : Complete Logistics Solution
 
Comunicacion 131025124929-phpapp01
Comunicacion 131025124929-phpapp01Comunicacion 131025124929-phpapp01
Comunicacion 131025124929-phpapp01
 
Advertising 4
Advertising 4Advertising 4
Advertising 4
 
Revit Screenshots
Revit ScreenshotsRevit Screenshots
Revit Screenshots
 
Lasnuevasredessociales¿modaorevolucion?
Lasnuevasredessociales¿modaorevolucion?Lasnuevasredessociales¿modaorevolucion?
Lasnuevasredessociales¿modaorevolucion?
 
Reference - Biogen
Reference - BiogenReference - Biogen
Reference - Biogen
 
Realisatiets De Laere Decor
Realisatiets De Laere DecorRealisatiets De Laere Decor
Realisatiets De Laere Decor
 
resume
resumeresume
resume
 
6
66
6
 
Paradigmas na Educação
Paradigmas na EducaçãoParadigmas na Educação
Paradigmas na Educação
 

Similar to Попасть в мишень

10 вещей, которые «невозможно» сделать в iOS
10 вещей, которые «невозможно» сделать в iOS10 вещей, которые «невозможно» сделать в iOS
10 вещей, которые «невозможно» сделать в iOSAny Void
 
Vizor Interactive: Технологии успеха
Vizor Interactive: Технологии успехаVizor Interactive: Технологии успеха
Vizor Interactive: Технологии успехаDevGAMM Conference
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Max Lapshin
 
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»DevGAMM Conference
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Ontico
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo Development
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...it-people
 
Alexander norinchak - HTML5 для мобильных платформ
Alexander norinchak - HTML5 для мобильных платформAlexander norinchak - HTML5 для мобильных платформ
Alexander norinchak - HTML5 для мобильных платформTrue Token
 
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаSergey Platonov
 
Devpoint2 video in internet
Devpoint2 video in internetDevpoint2 video in internet
Devpoint2 video in internetMax Lapshin
 
Cовременный станок верстальщика
Cовременный станок верстальщикаCовременный станок верстальщика
Cовременный станок верстальщикаmcslayer
 
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Yandex
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruYandex
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Positive Hack Days
 
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019corehard_by
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...SQALab
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, BadooOntico
 
sony vegas
sony vegassony vegas
sony vegaslog1111
 

Similar to Попасть в мишень (20)

10 вещей, которые «невозможно» сделать в iOS
10 вещей, которые «невозможно» сделать в iOS10 вещей, которые «невозможно» сделать в iOS
10 вещей, которые «невозможно» сделать в iOS
 
Vizor Interactive: Технологии успеха
Vizor Interactive: Технологии успехаVizor Interactive: Технологии успеха
Vizor Interactive: Технологии успеха
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.
 
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
 
Sivko
SivkoSivko
Sivko
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 
Alexander norinchak - HTML5 для мобильных платформ
Alexander norinchak - HTML5 для мобильных платформAlexander norinchak - HTML5 для мобильных платформ
Alexander norinchak - HTML5 для мобильных платформ
 
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
 
Devpoint2 video in internet
Devpoint2 video in internetDevpoint2 video in internet
Devpoint2 video in internet
 
Cовременный станок верстальщика
Cовременный станок верстальщикаCовременный станок верстальщика
Cовременный станок верстальщика
 
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
 
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
 
sony vegas
sony vegassony vegas
sony vegas
 

Попасть в мишень

  • 1. Попасть в мишень Как создавалась мини-игра "Тир удачи"
  • 2. Тир удачи Pointblank попробовать игру можно по адресу: 4ga.me/pb_shooting
  • 3. Что же такого особенного в этой игре? • Работоспособность во всех поддерживаемых браузерах (IE9+, Opera, Chrome, FF) • Эффект DoF и Motion Blur у фона и мишеней • Загрузка ресурсов и отображение процесса подготовки игры • Работа со звуками: стрельба, попадание в мишень и т.д.
  • 4. Пора выбрать сторону! Или на каких технологиях мы это будем реализовывать?
  • 7. html5 + css3 ✓ Простота разработки – много библиотек анимации ✓ 3D трансформации поддерживаются почти везде (caniuse.com/ transforms3d) ✓ Высокая производительность при выносе отрисовки на GPU (3D трансформации) ✕ Фильтры работают лишь в webkit (caniuse.com/css-filters) ✕ Большая деградация производительности в браузерах без поддержки 3D трансформаций ✕ Отсутствие субпиксельного позиционирования без 3D трансформаций
  • 9. canvas ✓ Простота разработки – много библиотек анимации ✓ Работает везде начиная с IE9 (caniuse.com/canvas) ✓ Поддерживает субпиксельное позиционирование ✓ Позволяет делать любые манипуляции с изображениями (фильтры и т.д.) ✕ Любые манипуляции с изображениями очень трудозатратны ✕ Не поддерживает 3D трансформации изображений
  • 11. webgl ✓ Высокая производительность при работе с изображениями ✓ Поддержка производительных фильтров и трансформаций ✓ Огромный API для работы с 3D сценой, поверхностями и текстурами ✕ Не достаточная доля браузеров поддерживает работу с webgl (caniuse.com/webgl) ✕ Сложная разработка. Имеются библиотеки, но их документации оставляют желать лучшего ✕ Код, оптимизированный под webgl при деградации на canvas, в старых браузерах получается малопроизводительным
  • 12. webgl API Docs Community Features Perf three.js* 2 5 5 4 5 pixi.js 5 4 3 2 5 * – не поддерживает работу со спрайтами
  • 13. Update! 14 января 2013г в EaselJS добавлена экспериментальная высокопроизводительная поддержка webgl Высокоуровневый API ограничен, но прирост производительности очень высок. Разработкой webgl рендера занимаются совместно @gskinner и Mozilla
  • 14. Приз зрительских симпатий был отдан реализации на canvas Из-за малой доли поддержки webgl в браузерах на октябрь-ноябрь 2013, а так же расширенных возможностей необходимых для поставленной задачи
  • 15. После исследований выбор пал на набор библиотек под названием CreateJS И библиотеку для работы с графикой – EaselJS (https://github.com/CreateJS/EaselJS)
  • 16. Но конечно же все оказалось не так просто...
  • 17. Первая версия proof of concept • 1 canvas – все сцены отрисовываются на нем • Фильтры motion-blur накладываемые в реальном времени • Изменение течения времени (эффект slow-mo) за счет изменения количества кадров
  • 18. В результате рекордные 4 fps Для улиток может и сойдет, но что-то с этим нужно делать
  • 19. Что же было сделано? • Сцены разделены на несколько слоев • Таймер заменен на requestAnimationFrame • Сделана предгенерация motion-blur для элементов • Режим slow-mo переделан со смены fps на менеджер анимаций
  • 20. Разделение сцен на слои • Позволяет проще контролировать отрисовку элементов на разных сценах • Позволяет сократить цикл отрисовки финальной сцены • Когда сцену не видно ее просчет можно совсем исключить из цикла рендеринга
  • 22. Менеджер анимаций • Все анимации переделаны на использование простой формулы S = V*t • Менеджер предоставляет именную коллекцию t для вышеописанной формулы • При включении режима slow-mo все записи в коллекции переумножаются на фактор замедления, что приводит к замедлению скорости элементов без изменения fps • Позволяет делать плавный переход от одной скорости к другой для заданной записи
  • 23. В результате получаем 50-60 fps Уже не стыдно показать! Но просадки fps очень режут глаз
  • 24. Продолжаем оптимизировать дальше! • Вынесение статичных текстур в DOM • Оптимизация цикла отрисовки мишеней
  • 25. Вынесение статичных текстур в DOM • Текстуры не имеющие никакие анимации или трансформации выносим в DOM элементы • Применяем к этим элементам 3D трансформации для реализации плавного перемещения с субпиксельным смещением • В браузерах, что не поддерживают 3D трансформации, деградируем до обычного смещения за счет стилей
  • 26. Оптимизация цикла отрисовки • Все элементы, что не видны пользователю помечаем, как невидимые тем самым они исключаются из цикла отрисовки • Для отрисовки обратной стороны мишеней используем один и тот же canvas с изображением • Удаляем невидимую сторону мишени со сцены, чтобы она никак не участвовала в цикле отрисовки • На сценах у которых используется фон не очищаем canvas перед отрисовкой
  • 28. В результате получаем • В Google Chrome и Opera Next – стабильные 60 fps) • Firefox – 59-60 fps. Под нагрузкой на браузер имеются кратковременные просадки на 1-2 fps) • Safari – 57-60 fps. Что выливается в неприятные кратковременные фризы анимаций
  • 29. Update После анонса поддержки webgl в EaselJS ситуация значительно изменилась
  • 30. Результаты с webgl • В Google Chrome и Opera Next – стабильные 60 fps) • Firefox – стабильные 60 fps) • Safari – Ситуация не изменилась. Поддержка webgl по умолчанию заблокирована
  • 31. Загрузка ресурсов и отображение процесса подготовки игры
  • 32. Что должен уметь делать загрузчик? • Загружать разные форматы файлов: изображения и звуки • Предоставлять информацию по текущему статусу загрузки • Позволять обрабатывать ошибки загрузки файлов
  • 33. Все это умеет делать загрузчик PreloadJS Входящий в комплект CreateJS (https://github.com/CreateJS/PreloadJS)
  • 34. Так почему не что-то другое?
  • 35. Чем же PreloadJS лучше? • Работа с XHR2 для отображения реального процесса загрузки с поддержкой фоллбеков • Возможность параллельной загрузки с поддержкой очередей • Поддержка плагинов. Есть плагин постобработки звуковых файлов для работы с библиотекой SoundJS • Хорошая документация и открытый API
  • 36. Процесс подготовки игры Для отображения процесса создания motion-blur кеша придется доработать загрузчик
  • 37. Как это было сделано • Создан класс Loader, который позволяет добавлять в очередь загрузки PreloadJS кастомные записи • Перед созданием motion-blur кеша добавляем равное количеству элементов записи в очередь загрузки • После создания кеша для элемента отстреливаем событие готовности, что переключает очередь загрузки будто мы загрузили файл
  • 38. Готово! Таким образом, в процесс отображения 100% входит, как загрузка файлов, так и подготовка всех элементов игры
  • 40. Какие требования к работе со звуком? • Воспроизведение одного или нескольких звуков одновременно • Кроссбраузерное воспроизведение звуков • Минимальный контроль за воспроизведением: проигрывание, пауза
  • 41. Даешь библиотеку для облегчения жизни! А есть ли что-нибудь в наборе CreateJS для работы со звуками?
  • 42. Как оказалось есть! Встречаем SoundJS! (https://github.com/CreateJS/SoundJS)
  • 43. Но всех проблем это не решило :( • В IE 9 есть небольшая задержка перед проигрыванием звуков • Если в Windows не настроен WMP, то звуки в IE воспроизводиться вообще не будут. • При включении Web Audio API в Firefox 25 перестали воспроизводиться все звуки. Было исправлено обновлением SoundJS • В Firefox 25 на всех Windows машинах mp3 файлы не загружались корректно. Было исправлено в новой версии Firefox
  • 44. Что хотелось, но не получилось...
  • 45. Не получилось реализовать • Разворот мишеней с настоящей 3d перспективой. Будет возможно в webgl версии • Правдоподобный дым от выстрелов