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

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

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

Регистрация: Mar 2013
Сообщений: 1,864
По умолчанию fps - когда и сколько

Хочется спросить у опытных, сколько fps Вы используете и какие есть случаи, на которых Вы выработали
его изменение?
А спросил я это вот по чему - всегда считал, что для анимации 30 кадров, это более чем хорошо.
Но на форуме попались упоминания о 60 и при чём не от одного и того же форумчанина.
А в гугле нашёл, что от 27-37+, в зависимости от самой анимации. Вот я и решил всё разузнать.


Последний раз редактировалось Akopalipsis; 02.11.2013 в 02:04.
Старый 02.11.2013, 19:58
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 2  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Для мобильных приложений хорошим тоном считается ориентироваться на 60 fps - идеальный случай. На самом деле выбирать особо не приходится - эта планка давно определена (насколько я знаю - это предел частоты обновления LCD экрана с включенной V-Sync)

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Чем больше кадров, тем плавнее анимация.
Откуда взялось 60 кадров? Просто было выявлено, что средняя частота обновления картинки в человеческом глазе, составляет около 55 - 60 раз в секунду. Больше глаз просто не сможет увидеть, поэтому делать больше нет смысла.

Не знаю как на счет хорошего тона, но если приложение тянет 60 кадров в секунду на мобиле, то это явно не плохо.
Я обычно ставлю 30 кадров. Вполне достаточно. Не вижу необходимости делать 60. Часто разница даже зрительно будет незаметна. Но какого-то общепринятого стандарта не существует.

Старый 03.11.2013, 01:01
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 4  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Присоединяюсь. Ставлю 30.
Но если у вас 60, и на onEnterFrame (к примеру ) висит достаточно тяжелый обработчик событий, а экшена, как такового, не присутствует, то вы будете грузить систему на ровном месте ни для чего....
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 03.11.2013, 13:37
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 5  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
Всем Большое Спасибо! Вчера, продолжая эксперименты, немного был удивлён.
Поставил getTimer + Timet и сделал частоту 60fps ( 1000/60 ) и ещё u, pdateAfterEvent в обработчик засунул.
Сначала трейсел, а потом начал в текстовое поле выводить и оказалось, что по истечении шести секунд,
проходило около ста кадров, десять секунд === 240. Это вообще без всего с одним текстфилдом. При ( 1000/30 ), такая же история.
И у меня ещё вопрос - работа твинов, она же на getTimer + Timet построена?

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
60 кадров для более-менее нагруженной анимации часто много, начинает лагать, если еще математики много то становится заметно. То же самое на 30 кадров будет ровнее. Так как длина кадра для расчетов больше.
В то же время на 30 кадрах всякие медленные твины типа, плавненького выезжания окошек, становятся заметно пошаговыми и вполне заметными для глаза.
Опытнным путем подобрал себе 40-45 фпс, этим и пользуюсь обычно. И анимации более гладкие получаются, и лагает из-за частоты обновления меньше.
Это касается стандартного ДЛ. В то же время на старлинге, с небольшим кол-вом объектов удавалось добиться под 100+ фпс

Цитата:
Сообщение от Akopalipsis
по истечении шести секунд проходило около ста кадров
updateAfterEvent лучше убрать. Он способен всё повесить. Им надо пользоваться оч аккуратно, и там где вы действительно понимаете зачем это надо.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 03.11.2013, 16:03
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 7  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
Dukobpa3 Спасибо!
Цитата:
updateAfterEvent лучше убрать. Он способен всё повесить. Им надо пользоваться оч аккуратно, и там где вы действительно понимаете зачем это надо.
Смотрите, если у меня есть сто обьектов, которые нужно анимировать, плавное движение, то можно сделать анимацию построенную на времени и контролировать самый верхний уровень раздачи время. У меня получилось уравновесь время, но по замерам кадров у меня не стыковка... Ведь маленькое подёргивание из-за провалов в обновлении экрана. В таких случаях оправданно пользоваться updateAfterEvent?

Старый 03.11.2013, 16:06
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 8  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
В анимациях это вообще не оправдано.

Добавлено через 10 минут
Про анимацию построенную на времени тоже писали.
Анимацию надо строить на энтерфрейме. Но можно мерять время с предыдущего кадра, чтобы иметь возможность подогнать ее.

Например спрайт должен пролететь 100 пкс, за 2 секунды.
Допустим у нас 60 кадров в секунду.
16.67мс на отрисовку одного кадра.
20мс на один пиксель.

Вот мы и считаем. Стандартная наша скорость будет ~3пкс за 4 кадра.
Если с предыдущего кадра прошло больше чем 20мс(вместо 16.67) - значит смело подвигаем на целый пиксель или больше, в зависимости от задержки. Если меньше (что маловероятно) оставляем на том же месте, но сохраняем в буфер "не использованную задержку" чтоб на следующем кадре посчитать всё вместе.

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

Добавлено через 12 минут
а updateAfterEvent - теоретически вызывает отрисовку немедленно, что очевидно, еще более нагружает систему. А нам при отставаниях ее наоборот разгрузить надо. (Могу ошибаться, так как пользовался этой функцией всего один раз).
Да и вцелом не вижу смысла в updateAfterEvent. Оно и так и так в следующем кадре отрисуется, такова уж система работы флеша. И если он понадобился скорее всего проблема в другом месте. Но иногда, например при драг-ен-дропах - это необходимо.
__________________
Кто к нам с чем для чего - тот у нас того от того.


Последний раз редактировалось Dukobpa3; 03.11.2013 в 16:26.
Старый 03.11.2013, 17:15
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 9  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Анимацию надо строить на энтерфрейме.
Вы меня извините за мою настойчивость, но мне хочется разобраться во всём.
В пример я создал EF с частотой 45 кадров. Когда я решаю сколько кадров выбрать, то руководствуюсь тем, что анимация будет обновляться столько раз, сколько кадров. И вот я вижу, что за десять секунд не хватает 150 кадров и анимация передвижения дергается. Вот почему лучше использовать EF + твины для сглаживания, если можно поставить 1fps, но запустить таймер с частотой обновления 45 раз в секунду, замерять время + его подгонять + updateAfterEvent, который будет вызываться точно 45 раз.
Вот почему такой подход не правильный, а создавать много разных твинов ( ведь обьектов много и двигуются они все с разной скорость ), это хорошо? А с таймером я и без лишней нагрузки ( без твинов ) задавать им разную скорость и уверен что лагов не будет, ведь частота обновления будет именно 45 раз.
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	import flash.utils.getTimer;
	import flash.utils.Timer;
 
	public class Main extends Sprite
	{
		private var _timer:MyTimer;
		private var _lastTime:Number
 
		private var _counterFrame:Number = 0;
		private var _counterTime:Number = 0;
 
		private const FRAME_RATE:Number = 60 / 1000;
		private const COUNTER_FRAME:Number = 60;
		private var _testTime:Number = 0;
 
		private var _render:TimerEvent;
		private var _cube:Cube;
 
		public function Main() 
		{
			init();
		}
		private function init(event:Event=null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			stage.addEventListener(MouseEvent.CLICK, stage_clickHandler);
 
			_cube = new Cube();
			addChild(_cube);
			_timer = new MyTimer(FRAME_RATE);
			_render = new TimerEvent(TimerEvent.TIMER);
		}
 
		private function stage_clickHandler(event:MouseEvent):void 
		{
			stage.addEventListener(Event.ENTER_FRAME, stage_enterFrameHandler);
			_lastTime =  getTimer() * 0.001;
		}
 
		private function stage_enterFrameHandler(event:Event):void 
		{
			var currentTime:Number = getTimer()* 0.001;
			var elapsedTime:Number = (currentTime-_lastTime) 
			_lastTime = currentTime;
			_testTime += elapsedTime;
			_counterFrame++;
			this.time(elapsedTime)
			//this.render(_render);
		}
		private function time(time:Number):void
		{
			_counterTime += time;
			_cube.x=_counterTime
			trace(_counterFrame,_counterTime);
		}
		private function render(event:TimerEvent):void
		{
			event.updateAfterEvent();
		}
	}
}

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Вместо небольших лагов раз в кадр ты хочешь один большой раз в секунду?
Ок.

Добавлено через 1 минуту
Научись сначала стандартными методами пользоваться, а потом уже если не хватит - свои велосипеды.
Но я думаю когда научишься использовать то что есть - и велосипеды будут иначе выглядеть.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

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

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


 


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


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