Не решение вашей проблемы, просто комментарий. Преимущества использования спрайт-листов могут быть потеряны или сильно уменьшены, если вы ориентируете их горизонтально. Это вызывает проблему с кэш-промахами.
Представьте, что у вас есть спрайт размером 10x10 пикселей. Чтобы загрузить часть вашего изображения, содержащую его, вам нужно загрузить (numPixels = sprite_height * src_width). В вашем случае это будет 10 x 105920 пикселей = 1 059 200 пикселей! - Только для кэширования изображения размером 100 пикселей.
Лучший способ ориентировать лист спрайтов — вертикально. Вы используете то же уравнение для определения количества пикселей, которые должны быть загружены, но получаете совсем другой результат. Результат, который теперь достаточно мал, чтобы поместиться в самый маленький (самый быстрый) кеш. В данном случае: 10 x 240 пикселей = 2400 пикселей. - Опять же, излишество всего для 100 пикселей, но решение лучше, чем дает предыдущий пример.
Изменение ориентации листа с горизонтальной на вертикальную приводит к уменьшению размера памяти, необходимой для кэширования этого спрайта, в 441 раз. Не совсем то, что я бы охарактеризовал как незначительное.
Эффект от внесения этого изменения будет наиболее заметен при многократном рисовании одного и того же спрайта или спрайтов, расположенных рядом друг с другом на листе спрайтов.
Учитывая, что браузер работает с полноцветными изображениями на экране, вполне разумно предположить, что из соображений производительности браузер преобразует ваше монохромное изображение в изображение, совместимое с остальной частью экрана, т. пиксель, хотя и с (относительно) небольшим изменением значения. Если бы изображение действительно было преобразовано в 24-битное, требования к памяти были бы огромными 105920 * 240 * 3 = 76262400 байт. Да!! Это 72,73 мегабайта!! Добавьте еще 1/3, если оно преобразовано в изображение rgba (32 бита).
Итак, у меня есть два предложения.
- Расположите ваши изображения вертикально
- Используйте несколько листов спрайтов.
person
enhzflep
schedule
21.11.2013