|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Oct 2013
Сообщений: 126
|
смысл растеризации изображений без анимации
Я читал, что если картинка имеет один кадр (иначе говоря, изображение не имеет анимации), то для производительности лучше, чтобы это был Sprite, а не MovieClip. Мувики же я перевожу в растр и кэширую в самом начале, опять же, в целях экономии потребляемой памяти. А вопрос такой: имеет ли смысл растеризовать статичные изображения без анимации? И если по каким-то причинам не получается растеризовать спрайт, что лучше: оставить спрайт в кривых или сделать его мувиклипом и растеризовать?
|
|
|||||
Векторная графика кешируется автоматом, если стоит cacheAsBitmap, но проблема в том, что так или иначе эта опция работает не очень точно. Например, при перемещении может обновление кеша происходить не будет, но при вращении или скейле это будет сильно грузить процессор.
Однако до меня доходили слухи о том, что cacheAsBitmap работает и вовсе странно - всё равно обновляет кеш раз в какой-то промежуток времени. Зачем - неясно. Поэтому кешировать лучше вручную, чтобы наверняка и гладко.
__________________
There is no thing in this world that is not simple. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Oct 2013
Сообщений: 126
|
Цитата:
А вопрос я немного уточню. Для растеризации МувиКлипов я использую соответствующий класс Антона Карлова, но почему-то при помощи него у меня получается кэшировать только МувиКлипы (видимо потому что класс заточен специально под растеризацию анимации). Поэтому я и думал, что лучше: делать спрайты МувиКлипами в Adobe Flash, чтобы их кэшировать при помощи этого класса (пусть даже там и всего один кадр), или оставлять спрайты спрайтами и создавать экземпляры прямо так вот: var _instance:Sprite_s=new Sprite_s ('Srpite_s'-имя, которое я в IDE присваиваю изображению в графе "export for AS"), и пускай они у меня остаются векторными. Пока что все изображения, имеющие несколько кадров, я без вариантов делаю МувиКлипами и кэширую, а те, где кадр только один - некоторые сделал мувиками и кэшировал по привычке, а некоторые оставил спрайтами и не кэширую. Прошу не судить строго за недостаток знаний для толкового формулирования вопроса |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
|
|
|||||
Регистрация: Oct 2013
Сообщений: 126
|
Цитата:
|
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
Цитата:
Цитата:
Цитата:
абсолютно никакой разницы, будет у тебя один мувиклип с 10 кадрами, или 10 спрайтов. но я тебе не разрешаю этого делать, потому что ты собираешься делать какую то фигню вроде ручного конвертирования спрайта в клип. выложи свои классы-растеризароты и тебе их модифицируют что бы оно спрайты тоже понимало. |
|
|||||
Регистрация: Oct 2013
Сообщений: 126
|
Цитата:
Цитата:
Так этот бред - цитата из описания фреймворка, ссылку на который вы дали Последний раз редактировалось a7s1h1; 02.02.2015 в 19:15. |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
a7s1h1, поздравляю, ты использовал сырой растеризатор.
var bmpd:BitmapData = new BitmapData(Math.ceil(r.width), Math.ceil(r.height), true, 0x000000); /** * Рассчитывает максимальный кадра на основе всех кадров клипа. * * @param mc Клип для которого необходимо получить максимальный размер кадра. * @return Возвращает максимальный размер кадра для указанного клипа. */ protected function getFrameSize(mc:MovieClip):Rectangle { var min:Point = new Point(); var max:Point = new Point(); var bounds:Rectangle; var n:int = mc.totalFrames; for (var i:int = 1; i <= n; i++) { mc.gotoAndStop(i); allChildGotoFrame(mc, i); bounds = mc.getBounds(mc); min.x = Math.min(bounds.topLeft.x, min.x); min.y = Math.min(bounds.topLeft.y, min.y); max.x = Math.max(bounds.bottomRight.x, max.x); max.y = Math.max(bounds.bottomRight.y, max.y); } mc.gotoAndStop(1); return new Rectangle(min.x, min.y, max.x - min.x, max.y - min.y); } забыдлопастил, попробуй http://pastebin.com/2AJz5dF8 еще раз: Цитата:
>public class AntActor extends Sprite |
|
|||||
Регистрация: Oct 2013
Сообщений: 126
|
Цитата:
Добавлено через 3 часа 12 минут Всё работает, спасибо! правда пришлось в паре мест пришлось заставить метод воспринимать передаваемый аргумент как мувик /** * Кэширование из экземпляра клипа. * * @param clip Клип который необходимо растеризировать. */ public function cacheFromClip(cl:DisplayObject):void{ ... var clip:MovieClip=cl as MovieClip; ... } - Имеет ли смысл растеризовать неподвижный спрайт? (рисую всё в flsh cs, однокадровые изображения - спрайты, где кадров несколько - мувиклипы) - Я думал, что растеризация изображений из библиотеки поможет мне уменьшить потребляемую память, а, судя по показаниям System.totalMemory, выходит наоборот: каждый раз, когда я добавляю в список для растеризации какой-нибудь клип (не новый, а просто ранее нерастеризованный), то System.totalMemory увеличивается на некоторую величину, в зависимости от размера изображения и количества кадров (имеется ввиду просто значение, а не динамика, т.е. речь не об утечке). При этом ни падения fps, ни подтормаживания не наблюдается. Что я делаю или понимаю не так? (Для отладки (fps, mem, etc.) использую класс Stats) Последний раз редактировалось a7s1h1; 03.02.2015 в 13:52. |
Часовой пояс GMT +4, время: 00:16. |
|
« Предыдущая тема | Следующая тема » |
|
|