Как стать автором
Обновить

Комментарии 13

Интересует несколько вопросов.
1. В цикле отрисовки все время происходит перерисовка всего холста или же только измененных его частей?
2. Поддерживается ли многослойность?
Перерисовка происходит для всей «сцены», так что многие применяют трюки для борьбы с падением производительности.
Многослойность поддерживается так: что сначала в коде — то и рисуется ниже, то есть порядок определяет z-индекс элементов.
Это трудно назвать многослойностью. Перерисовываться то все слои целиком тогда будут. Слои должны состоять из отдельных canvas элементов, наложенных друг на друга.
На первый взгляд звучит как костыль. Такое где-нибудь в серьёзных либах вообще используется?
Я думаю что это не костыль, а пока единственное возможное решение многослойности. За счёт чего и достигается производительность.
Простой пример, статичный фон 800х600 и анимированный спрайт 50х50. Зачем нам ~16 раз в секунду перерисовывать весь холст 800х600 только из-за анимации маленького спрайта? Вот и падение производительности.
Как бы этот выигрыш в производительности не оказался съеден накладными расходами. Без бенчмарков я как-то не уверен.
Ну а что тут измерять? Я думаю по примеру просто очевидно, 800х600 перерисовывать или 50х50.
Пример очень простой, но дает понять суть.
Я сварщик не настоящий и в низкоуровневых аспектах графики разбираюсь плохо. Но что-то мне подсказывает, что браузер при любом изменении всё равно перерисовывает канвас целиком.
По скорости несколько слоев выгодней, но оперативки жрет больше.

Личные наблюдения.
Если слои будут очень разряженные и их будет много выйгрыш потеряется.
хотя это скорее редкая ситуация. Более чем достаточно использовать 8-16 слоев, чтобы реализовать ВСЕ. И так и нужно делать.
На счет использования этого метода. Знаю пока только про LibCanvas. Там как раз все так и происходит
Что с производительностью? Официальный сайт чуть не повесил Chrome.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории