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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.02.2009, 19:56
Kolan вне форума Посмотреть профиль Отправить личное сообщение для Kolan Найти все сообщения от Kolan
  № 1  
Ответить с цитированием
Kolan

Регистрация: Jan 2009
Сообщений: 38
По умолчанию Тормоза при отрисовке через время

Здравствуйте!

Есть флешка, которая представляет собой что-то вроде видео плеера. На ней есть кнопка плея и паузы.


Когда система играет, то проигрывается видео, рисуется несколько графиков, еще двигается несколько мувиклипов, изменяются лейблы. Также, используется свой курсор-муви клип... Короче, происходит много перерисовок.

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

Эксперименты показали, что, видимо, что-то происходит с рисованием. Например если понизить качество, то станет быстрее.

Конечно понимаю, что скорее всего дело в руках, но может быть я что-то упустил? Может можно как-то что-то очищать, какой-нибудь буфер рисования?

Есть мысли что это может быть?

И еще, есть ли какие-нибудь средства профилировки для флеша? Как можно отладиться в такой неприятной ситуации?

Добавлено через 20 часов 41 минуту
Совсем никаких идей?

Старый 24.02.2009, 11:28
Fillini вне форума Посмотреть профиль Отправить личное сообщение для Fillini Найти все сообщения от Fillini
  № 2  
Ответить с цитированием
Fillini
 
Аватар для Fillini

Регистрация: Nov 2008
Адрес: Казахстан
Сообщений: 204
Отправить сообщение для Fillini с помощью ICQ
дело в использовании памяти и жестких ссылках на объекты.

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

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Проверьте не создается ли каких нибудь объектов на сцене которые периодически с нее удаляются и должны убираться мусорщиком. Скорей всего такие объекты есть, и они подписаны на события, или увязаны с потоковым видео или музыкой. Перед их удалением необходимо убить все ссылки которые могут быть с ними свзяаны, в том числе все подписки.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 24.02.2009, 15:08
Ромастый вне форума Посмотреть профиль Отправить личное сообщение для Ромастый Найти все сообщения от Ромастый
  № 4  
Ответить с цитированием
Ромастый
 
Аватар для Ромастый

Регистрация: Jan 2004
Адрес: На чердаке.
Сообщений: 1,112
Может быть мемори-лики, но есть подозрение, что автор не очищает graphics при перерисовке. Симптоматика похожая.
Код в студию. Или хотя б тот участок, где производится отрисовка.
__________________
...Тебе страшно? Мне - нет.

Старый 24.02.2009, 15:50
Vreden вне форума Посмотреть профиль Отправить личное сообщение для Vreden Найти все сообщения от Vreden
  № 5  
Ответить с цитированием
Vreden
 
Аватар для Vreden

Регистрация: Feb 2009
Сообщений: 141
Не забываем отписываться от ENTER_FRAME всегда и везде!!!

Старый 24.02.2009, 17:11
Kolan вне форума Посмотреть профиль Отправить личное сообщение для Kolan Найти все сообщения от Kolan
  № 6  
Ответить с цитированием
Kolan

Регистрация: Jan 2009
Сообщений: 38
Ух, а я уже потерял надежду.

Fillini,
как можно проверить использование памяти? Что вы имеете в виду под «жесткими ссылками на объекты»?

SunShadow,
вроде таких объектов нет. Периодически меняются только графики, но это простые lineTo, moveTo. Остальные объекты создаются один раз, а потом просто двигаются или скрываются.
Как можно проверить, что все именно так как я думаю?

...есть подозрение, что автор не очищает graphics...
Нет, тут вроде все нормально. Я, вообще, использую haXe. Процедуры прорисовки все примерно такие:
Код AS3:
override public function draw() {
  var g:Graphics = this.graphics;
  g.clear();
...
Vreden,
тут вроде все нормально. Я использую такого предка для всех визуальных контролов:
Код AS3:
class Control extends MovieClip{
...
 
public function invalidate()
{
	addEventListener(Event.ENTER_FRAME, onInvalidate);
}
 
private function onInvalidate(event:Event)
{
	removeEventListener(Event.ENTER_FRAME, onInvalidate);
	draw();
}
 
public function draw() {
	dispatchEvent(new Event(Control.DRAW));
}
 
 
}
то есть, как видите, отписка происходит автоматически.

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>тормозит даже если выключить плей, то есть остановить всякие отрисовки

т.е. тормоза не в самой отрисовке, а выводе нарисованного на экран
я бы попробовал сразу после каждой отрисовки перегонять все в битмап, а graphics очищать

Старый 24.02.2009, 17:51
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Во Флексе есть профайлер... других вроде нету... Ну можно потрейсить System.totalMemory но это как бы мало поможет - все равно что на таск-менеджер посмотреть
__________________
Hell is the possibility of sanity

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

Регистрация: Nov 2008
Адрес: Казахстан
Сообщений: 204
Отправить сообщение для Fillini с помощью ICQ
Память можно посмотреть и ctrl+alt+delete. Если память все время увеличивается значит дело в жестких ссылках.
листенеры правильно писать так
Код AS3:
addEventListener(Event.ENTER_FRAME, onInvalidate, false,0,true);
так же не забываем очищать DisplayList.
примерно вот таким кодом
Код AS3:
 
while(numChildren-1)
{
	removeChildAt(0);
}

Старый 25.02.2009, 11:25
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Сообщение от Fillini Посмотреть сообщение
листенеры правильно писать так
Код AS3:
addEventListener(Event.ENTER_FRAME, onInvalidate, false,0,true);
и совсем даже не правильно их так писать, имхо
я бы сказал, что листенеры можно писать и так, если лень или некогда построить нормальную структуру

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

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

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


 


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


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