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

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

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

Регистрация: Nov 2007
Сообщений: 53
По умолчанию Дрожание рендера

Добрый день. Наверное с этим уже многие сталкивались. Как избавится от дрожания рендера? Насколько точные результаты дает getTimer()? Где лудше всего просчитывать логику, в таймере или по собитию ENTER_FRAME. У меня при средних и высоких скоростях, заметно неприятное дрожание всего мира, особенно в браузере. Как с этим боротся?

Старый 21.08.2009, 17:30
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Логику считать лучше по таймеру, тк если привязываться к ENTER_FRAME, то скорость течения игрового времени будет разная в зависимости от fps, который зависит от производительности клиентского компа.
__________________
тонкий тролль, осеянный благодатью

Старый 21.08.2009, 17:34
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 3  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
И таймер, и ENTER_FRAME имеют низкую точность, которая также зависит от браузера. Хуже всего дела обстоят в IE. Из-за этого получается ограничение максимального FPS до 100 в проигрывателе и до 66 в IE.

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

Регистрация: Jan 2009
Сообщений: 1,651
а мой опыт говорит, что считать логику по таймеру отдельно от прорисовки совершенно бесполезно.
Что можно посоветовать.
1. Так как шаг enterFrameHandler непостоянный, то изменять координаты по правилу:
Код:
dt = curTime-prevTime;
shift = curPosition + speed*dt;
т.е. приращение координат зависит от времени, что прошло между двумя кадрами, а не константно.
2. Добавить эффекты размытия. Когда что-то быстро движется в реальном мире - мы видим шлейф за этим предметом. При программировании быстрого перемещения об этом забывают, а так как принципы создания изображения на экране таковы, что что изображение меняется скачками - то перемещение выглядит дерганым и неестественным.
3. Неконстантная скорость. В реальном мире предметы разгоняются, движутся на большой скорости, тормозят. Мгновенное ускорение и мгновенная остановка делают перемещение неестественным. Добавить easing надо.

Старый 21.08.2009, 17:41
Graf_h вне форума Посмотреть профиль Отправить личное сообщение для Graf_h Найти все сообщения от Graf_h
  № 5  
Ответить с цитированием
Graf_h

Регистрация: Nov 2007
Сообщений: 53
Мне вот интересно из - за чего дрожание. У меня в таймере в просчет логики идет привязка к милисекундам, тоесть delta = сurrTime - lastTime; Пробовал вызывать updateAfterEvent(), безрезультатно. Насколько точно работает getTimer()? Подозреваю что он дает не четкие результаты.

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

Регистрация: Jan 2009
Сообщений: 1,651
Да немного неточно. Ни Timer, ни setInterval, ни getTimer() точного резульатта не дают. Кстати, зависит от fps точность немного. Если сделать 10fps + Timer (33) + eмуте.updateAfterEvent() будет намного дерганей, чем при 40fps. Но задирать эту планку не советую, иначе все процессорное время уйдет тупо на перерисовку экрана.
Вот не знаю, даст ли более точный результат new Date().getTime() чем getTimer() =/
Надобно проверить.

Старый 21.08.2009, 17:51
Graf_h вне форума Посмотреть профиль Отправить личное сообщение для Graf_h Найти все сообщения от Graf_h
  № 7  
Ответить с цитированием
Graf_h

Регистрация: Nov 2007
Сообщений: 53
iflamberg, может сам рендер не успевает обновить картинку?? Это что то напоминает дх, когда фпс не совпадает с частотой развертки монитора, я тогда тоже что - то похожее видел.

Старый 21.08.2009, 17:56
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 8  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
С помощью updateAfterEvent можно очень сильно поднять FPS, но это настолько сильно загрузит всю систему, что перестанет опрашиваться управление. Примерно так - обновление логики и экрана повесить на таймер с минимальным интервалом и одним повторением, в конце вызываемой функции перезапустить таймер и только тогда updateAfterEvent.

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


Последний раз редактировалось VVall; 21.08.2009 в 20:36. Причина: typo
Старый 21.08.2009, 19:53
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 9  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
Цитата:
Сообщение от iflamberg Посмотреть сообщение
2. Добавить эффекты размытия.
Вопрос, как это реализовать? Т.е. у меня есть движущийся спрайт, как за ним оставить шлейф так, чтобы не потерять производительность?

Старый 21.08.2009, 20:01
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 10  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Ну тут уж выбирать. Или производительность, или дублировать на задний слой объект с блуром.

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

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

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


 


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


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