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

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

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

Регистрация: Jun 2006
Сообщений: 55
По умолчанию Программное рисование сильно затормаживает скорость ролика

В цикле рисую на экране N квадратиков. Перед рисованием расчитываю несколько параметров каждого квадратика: цвет, координаты, размеры, альфу и тп, затем выполняю такой код:
Код:
layer.clear();
for(i = 1; i <= N; i++)
{
layer.lineStyle(4, color[i], a[i]);
layer.moveTo(X[i], Y[i]);
layer.lineTo(X[i] + R[i], Y[i] + R[i]);
layer.lineTo(X[i] - R[i], Y[i] + R[i]);
layer.lineTo(X[i] - R[i], Y[i]);			
}
Координаты каждого квадратика меняются по 50 раз в секунду, и 50 раз в секунду слой (слой - это простой мувиклип) очищается и на нем заново рисуется N квадратиков с новыми координатами.

Так вот, чем больше N тем заметнее тормозит вывод изображения, при N = 30 на моем п3 1,3 ролик отображается со скоростью примерно 5 кадров в секунду... Если из программы убрать выше приведенный код, но оставить расчет параметров квадратиков, то скорость ролика заметно увеличится, отсюда я могу сделать вывод, что тормозит именно программная отрисовка.

Пробовал вместо программной отрисовки сделать один мувиклип с нарисованным в нем квадратиком, а затем с помощью attachMovie продублировать его N раз, но опять же при N = 30 скорость очччень сильно падает...

Что посоветуете? Как нарисовать на экране несколько десятков примитивных объектов, да так, чтобы скорость отрисовки была приличной?

Старый 05.08.2006, 19:54
alkonaft вне форума Посмотреть профиль Отправить личное сообщение для alkonaft Найти все сообщения от alkonaft
  № 2  
Ответить с цитированием
alkonaft
[+ 1.3 25.06.06]
[+1 25.06.06]
 
Аватар для alkonaft

Регистрация: Jan 2006
Сообщений: 144
Цитата:
Сообщение от Огнеметчик
В цикле рисую на экране N квадратиков. Перед рисованием расчитываю несколько параметров каждого квадратика: цвет, координаты, размеры, альфу и тп, затем выполняю такой код:
Код:
layer.clear();
for(i = 1; i <= N; i++)
{
layer.lineStyle(4, color[i], a[i]);
layer.moveTo(X[i], Y[i]);
layer.lineTo(X[i] + R[i], Y[i] + R[i]);
layer.lineTo(X[i] - R[i], Y[i] + R[i]);
layer.lineTo(X[i] - R[i], Y[i]);			
}
Координаты каждого квадратика меняются по 50 раз в секунду, и 50 раз в секунду слой (слой - это простой мувиклип) очищается и на нем заново рисуется N квадратиков с новыми координатами.

Так вот, чем больше N тем заметнее тормозит вывод изображения, при N = 30 на моем п3 1,3 ролик отображается со скоростью примерно 5 кадров в секунду... Если из программы убрать выше приведенный код, но оставить расчет параметров квадратиков, то скорость ролика заметно увеличится, отсюда я могу сделать вывод, что тормозит именно программная отрисовка.

Пробовал вместо программной отрисовки сделать один мувиклип с нарисованным в нем квадратиком, а затем с помощью attachMovie продублировать его N раз, но опять же при N = 30 скорость очччень сильно падает...

Что посоветуете? Как нарисовать на экране несколько десятков примитивных объектов, да так, чтобы скорость отрисовки была приличной?
совет прост убей всякие ненужные циклы.
И вообще апгрейд компа решает.
я лично адаптирую свой флеш под П4 1.7
Но даже этот слабенький комп превратиться в более мощный, через неделю.

Но есть вариант делаеш шейп и несколько дорожек, муторно и гиморно но как не странно помогает.
__________________
Что за опен соурс без водки?

Старый 05.08.2006, 23:00
Огнеметчик вне форума Посмотреть профиль Отправить личное сообщение для Огнеметчик Найти все сообщения от Огнеметчик
  № 3  
Ответить с цитированием
Огнеметчик

Регистрация: Jun 2006
Сообщений: 55
Цитата:
совет прост убей всякие ненужные циклы.
Хммм... То есть если заменить код
Код:
for(i = 1; i <= N; i++)
{
layer.lineStyle(4, color[i], a[i]);
layer.moveTo(X[i], Y[i]);
layer.lineTo(X[i] + R[i], Y[i] + R[i]);
layer.lineTo(X[i] - R[i], Y[i] + R[i]);
layer.lineTo(X[i] - R[i], Y[i]);			
}
на код:
Код:
layer.lineStyle(4, color[1], a[1]);
layer.moveTo(X[1], Y[1]);
layer.lineTo(X[1] + R[1], Y[1] + R[1]);
layer.lineTo(X[1] - R[1], Y[1] + R[1]);
layer.lineTo(X[1] - R[1], Y[1]);

layer.lineStyle(4, color[2], a[2]);
layer.moveTo(X[2], Y[2]);
layer.lineTo(X[2] + R[2], Y[2] + R[2]);
layer.lineTo(X[2] - R[2], Y[2] + R[2]);
layer.lineTo(X[2] - R[2], Y[2]);	

............................................

layer.lineStyle(4, color[30], a[30]);
layer.moveTo(X[30], Y[30]);
layer.lineTo(X[30] + R[30], Y[30] + R[30]);
layer.lineTo(X[30] - R[30], Y[30] + R[30]);
layer.lineTo(X[30] - R[30], Y[30]);
я получу прирост производительности? Сейчас попробую, хотя странно всё это...
Цитата:
И вообще апгрейд компа решает.
я лично адаптирую свой флеш под П4 1.7
Дык апгрейд компа не проблема, просто я боюсь что потенциальные пользователи тоже сидят с таким древним железом как у меня и хочется чтобы и у них все летало...
Цитата:
Но есть вариант делаеш шейп и несколько дорожек, муторно и гиморно но как не странно помогает.
Ой... Я чего-то этой фразы не понял, можешь поподробнее описать процесс? Спасибо.

Старый 05.08.2006, 23:25
alkonaft вне форума Посмотреть профиль Отправить личное сообщение для alkonaft Найти все сообщения от alkonaft
  № 4  
Ответить с цитированием
alkonaft
[+ 1.3 25.06.06]
[+1 25.06.06]
 
Аватар для alkonaft

Регистрация: Jan 2006
Сообщений: 144
Цитата:
Сообщение от Огнеметчик
Хммм... То есть если заменить код
Код:
for(i = 1; i <= N; i++)
{
layer.lineStyle(4, color[i], a[i]);
layer.moveTo(X[i], Y[i]);
layer.lineTo(X[i] + R[i], Y[i] + R[i]);
layer.lineTo(X[i] - R[i], Y[i] + R[i]);
layer.lineTo(X[i] - R[i], Y[i]);			
}
на код:
Код:
layer.lineStyle(4, color[1], a[1]);
layer.moveTo(X[1], Y[1]);
layer.lineTo(X[1] + R[1], Y[1] + R[1]);
layer.lineTo(X[1] - R[1], Y[1] + R[1]);
layer.lineTo(X[1] - R[1], Y[1]);

layer.lineStyle(4, color[2], a[2]);
layer.moveTo(X[2], Y[2]);
layer.lineTo(X[2] + R[2], Y[2] + R[2]);
layer.lineTo(X[2] - R[2], Y[2] + R[2]);
layer.lineTo(X[2] - R[2], Y[2]);	

............................................

layer.lineStyle(4, color[30], a[30]);
layer.moveTo(X[30], Y[30]);
layer.lineTo(X[30] + R[30], Y[30] + R[30]);
layer.lineTo(X[30] - R[30], Y[30] + R[30]);
layer.lineTo(X[30] - R[30], Y[30]);
я получу прирост производительности? Сейчас попробую, хотя странно всё это...

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

Ой... Я чего-то этой фразы не понял, можешь поподробнее описать процесс? Спасибо.
1 а почему всё это не нарисовать в ручную?
2 Код для облегчения можеш сделать рекурсией.
__________________
Что за опен соурс без водки?

Старый 05.08.2006, 23:53
Огнеметчик вне форума Посмотреть профиль Отправить личное сообщение для Огнеметчик Найти все сообщения от Огнеметчик
  № 5  
Ответить с цитированием
Огнеметчик

Регистрация: Jun 2006
Сообщений: 55
Цитата:
а почему всё это не нарисовать в ручную?
Потому что положение цвет и размеры зависят от действий пользователя и нет двух случаев когда все параметры друг с другом совпадают, по этому заранее прорисовать объекты не представляется возможным.

Старый 06.08.2006, 01:07
szz вне форума Посмотреть профиль Отправить личное сообщение для szz Найти все сообщения от szz
  № 6  
Ответить с цитированием
szz

Регистрация: Aug 2004
Адрес: Moscow, Jerusalem
Сообщений: 26
Нет-нет, ни в коем случае не разварачивай цикл в линию, это глупость, бытрее от этого не станет.
Попробуй оптимизировать, посмотри, может чем рисовать каждый квадратик можно сделать заготовку - квадратик и потом ее продублировать сколько надо раз, поменять им цвета задать положение и тд, и не бездумно каждую итерацию все стирать и заново рисовать, а продумать чтобы добавлять или стирать квадратики по одному/несколько по мере необходимости?

Старый 06.08.2006, 10:57
alkonaft вне форума Посмотреть профиль Отправить личное сообщение для alkonaft Найти все сообщения от alkonaft
  № 7  
Ответить с цитированием
alkonaft
[+ 1.3 25.06.06]
[+1 25.06.06]
 
Аватар для alkonaft

Регистрация: Jan 2006
Сообщений: 144
Цитата:
Сообщение от szz
Нет-нет, ни в коем случае не разварачивай цикл в линию, это глупость, бытрее от этого не станет.
Попробуй оптимизировать, посмотри, может чем рисовать каждый квадратик можно сделать заготовку - квадратик и потом ее продублировать сколько надо раз, поменять им цвета задать положение и тд, и не бездумно каждую итерацию все стирать и заново рисовать, а продумать чтобы добавлять или стирать квадратики по одному/несколько по мере необходимости?
От обьектов легче не станет.
Машина очень слабая.
__________________
Что за опен соурс без водки?

Старый 06.08.2006, 11:06
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 8  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: Jun 2005
Сообщений: 636
А зачем тебе такие быстрые изменения - 50 раз в секунду? потом зачем каждый раз рисовать квадрат? не легче ли менять размеры у отрисованного мува (в котором ты один раз рисуешь квадрат), а цвет через объект Color можно менять.

потом если работаешь под 8 плеер, то можно заменить векторное рисование квадратов на использование класса BitmapData

Старый 06.08.2006, 20:27
Огнеметчик вне форума Посмотреть профиль Отправить личное сообщение для Огнеметчик Найти все сообщения от Огнеметчик
  № 9  
Ответить с цитированием
Огнеметчик

Регистрация: Jun 2006
Сообщений: 55
Цитата:
Сообщение от 7thsky™
потом если работаешь под 8 плеер, то можно заменить векторное рисование квадратов на использование класса BitmapData
Вот это интересное предложение. Не знал о таком классе, сейчас почитал о нем в хелпе, попытаюсь его использовать в программе, надеюсь это поможет ускорить её работу.

Цитата:
Нет-нет, ни в коем случае не разварачивай цикл в линию, это глупость, бытрее от этого не станет.
Честно говоря тоже так думаю...

Цитата:
От обьектов легче не станет.
Машина очень слабая.
Угу, даже совсем наоборот, у меня изначально и была куча объектов созданных при помощи attachMovie, и работало даже медленнее чем сейчас (хотя оцениваю на глаз, может и не медленнее, но точно не быстрее)...

Старый 06.08.2006, 23:09
KUZEN вне форума Посмотреть профиль Отправить личное сообщение для KUZEN Посетить домашнюю страницу KUZEN Найти все сообщения от KUZEN
  № 10  
Ответить с цитированием
KUZEN
Ветеран форума
 
Аватар для KUZEN

Регистрация: Jun 2005
Адрес: MOSCOW
Сообщений: 6,852
Отправить сообщение для KUZEN с помощью ICQ Отправить сообщение для KUZEN с помощью Yahoo Отправить сообщение для KUZEN с помощью Skype™
Дурдом, слепили один раз мув нарисовали всё что нужно, а дальше меням координаты или что там нужно у самого мувика и ничего перерисовывать не нужно
__________________
BestMasterиZация

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

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

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


 


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


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