Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.04.2014, 12:36
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 1  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
По умолчанию Производительность при большом количестве прозрачных PNG

Здравствуйте
У меня задание собрать из секвенции рендеров крутящуюся машинку.
Причем, она разделена на бампер, стекла, колеса итд.
То есть для каждой из деталей по 36 картинок секвенции поворота авто.
Как быстрее будет работать "поворот" машинки:
- сложить все в кучу и менять visible
- addChild/removeChild определенной части машинки

Для наглядности прикрепил 2 скрина. Красным выделяется та часть авто, на которую наведена мышка.

P.S. Я пока сделал смену visible, но при первом повороте наблюдаю тормоза. После первого прохода по секвенции (поворота авто) тормоза пропадают. Причем, если поворот влево полностью прошел, тормоза пропали для поворота влево, для того чтобы пропали торомоза при повороте вправо нужно прогнать один раз этот поворот вправо.
Изображения
   

Старый 04.04.2014, 13:37
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 2  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
А менять битмапдату у битмапы?
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 04.04.2014, 20:18
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 3  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
надо попробовать, спасибо за совет.

Старый 04.04.2014, 21:37
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Попробуйте перед отображением машинки пробежаться и вызвать Bitmap#bitmapData у всех Loader#content или ссылок на них. Просто так, дернув этот геттер. Есть мнение, что при этом реально происходит разворачивание битмапдаты в ОЗУ.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 14.04.2014, 17:11
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 5  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
К сожалению, ни один из способов не дал ощутимого прироста в производительности.
Я сделал смену битмап даты у битмапы + дернул .bitmapData свойство у каждой из битмап после создания.

Выявилась еще одна проблема:
подозреваю что GC убивает битмапы, которые на данный момент содержатся в массиве, но не показываются. Такое может быть ?

Также хотел бы спросить, возможно какой-нибудь Stage3D фрэймворк показал бы производительность повыше, при операции смены больших картинок друг другом ?

Старый 14.04.2014, 17:21
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 6  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
По ответу складывается впечатление, что Вы немного не так поняли.
Нужно после загрузки всех картинок, вынуть из них BitmapData и сложить в массив.
Затем создать одну Bitmap и каждый кадр, вместо addChild(img), делать bitmap.bitmapData = bitmapDatas[i];.

Добавлено через 5 минут
И ещё вопрос - Вы сказали, что каждый кадр ( машина в целом виде ), состоит из нескольких картинок.
Много их? Вы их в общею BitmapData отрисовываете?

Добавлено через 11 минут
Вам как минимум нужно вытащить все BMD и сложить их в массив.
Дальше не понятно, у Вас части машин меняются? То есть стекла, фары, колеса?
Это я спрашиваю для того, что нужно все части полюбому отрисовать в один кадр.
И вот если части не меняются, то первичный массив с частями можно удалить и удалить из памяти все BMD.
А дальше сделать одну BM и каждый кадр присваивать его bmd, bmd полной машины из массива.
Больше уже не чего вроде и сделать нельзя.
И если это не поможет, то Starling.

Старый 14.04.2014, 17:55
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 7  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Машинка в один момент времени это от 5 до 10 частей в зависимости от модели
- колеса
- передние фары
- задние фары
- итд
То есть если 36 кадров на один поворот вокруг своей оси, то 5-10 * 36 = столько картинок нужно загрузить для одного поворота машины с таким набором частей.
Каждую из деталей нужно менять, подгружая наборы рендеров.
Каждую из деталей нужно окрашивать.
Должна иметься возможность кликнуть на машинку и та часть, на которую кликнули (капот, допустим) должна выделиться (цветом, например).

Общую битмап дату я не отрисовываю по вышеперечисленным причинам.
Все битмапы (правда, не BMD) я складываю в массив, верно.
Затем в зависимости от текущего кадра подставляю в капот элемент массива капота (kapotBitmap.bitmapData = kapotBitmaps[currentFrame].bitmapData)

На данный момент проблема в очень больших рендерах (1024x600) для каждой из частей каждой из картинок. Я заказчику указал на то что "воздух" в рендерах нужно вырезать, надеюсь это увеличит производительность.

Про GC ничего не известно в данной картине ?

P.S. Как вы думаете Старлинг пошустрее будет ?

Старый 14.04.2014, 18:17
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 8  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
Тут вот какое дело - я Вам советую, то, что кажется разумным, но сам я такого не делал
я говорю, как бы я сделал.
Смотрите - первое что нужно выяснить, занимает ли в памяти место, сто процентная прозрачность.
Если да, то зачем тогда иметь битмапдату разразмером 1024x600, когда на ней 300х300 только нарисовано.
Значит нужно обрезать максимум, и вычислить координаты. Это уже плюс к производительности.
Второе - с самого начала и до конца, модели частей имеют одну и туже форму, значит можно создать 36 кадров, на каждом из которых будет отрисована вся машина, но только каждый элемент своего цвета.
Допустим, большая часть - черного цвета, чуть поменьше - на одну циферку больше чем черный цвет.
Это получится карта для кликов, кликнув по по машине, Вы будете брать цвет с этих битмапдат и смотреть куда кликнули. Это даст шанс отрисовывать все части в одну битмапдату.
Битмапдаты которые с настоящей машиной перерисовывать каждый кадр смысла нет, только когда что-то изменится.
Вам нужно прям отдельные класса рендера писать. Так что лучше старлинг использовать.

Добавлено через 41 минуту
Перечитал Ваши слова ещё раз и - в массивах хранить BMD, все части одного кадра отрисовывать в одну BMD, у единственной BM менять по кадрам bmd на отрисованный кадр.

Старый 14.04.2014, 21:05
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 9  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Антон Карлов в своих статьях говорил о том, что один цельный объект, пусть огромный, но обрабатывается быстрее, чем если бы он состоял из сотни мелких.
__________________
There is no thing in this world that is not simple.

Старый 14.04.2014, 22:27
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 10  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
В целом, производительность выросла после того как я убрал "воздух" из каждой из PNG для каждой из деталей. Теперь нет тормозов и мороки с первым "прогоном" цикла картинок. Что касается одной БМД (BMD), ну, хз, как она мне пригодится если после остановки пользователь должен иметь возможность выбрать или фары или капот или еще что-то. Замечу также что пользователь должен иметь возможность у этих капотов итд сменить цвет. То есть для того чтобы сделать в одной БМД мне нужно будет:
1) прогнать один круг из ВСЕХ частей, создав 36 БМД смерженых(merge layers, грубо говоря) кусков в одну машинку
2) если воспроизведение поставили на паузу, опять накладывать все части авто друг на друга чтобы дать возможность выделать мышкой капот итд на машинке

Стоит ли это сложностей связанных с дополнительным программированием, не совсем уверен...
Хотя, нужно попробовать.

P.S. Если не в массив а в вектор запихнуть БМД-шки, теоретически еще побыстрее будет доступ ?

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:30.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.