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

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

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

Регистрация: Jul 2013
Адрес: Каскелен
Сообщений: 86
По умолчанию частота выполнения по EnterFrame... кратность

например, есть код, который выполняется 1 раз в 2 кадра
Код AS1/AS2:
 
_delay = 0;
}
 
private function onStartBlinkingOnEnterFrame(e:Event):void 
		{
			_delay ++;
 
			if (_delay == 2){ // тут код моргания...
т.е. этот код будет каждые 2 кадра вызываться... если поставить _delay == 1, то будет каждый кадр... проблема в том, что каждый кадр - это слишком быстро, а каждые 2 кадра - это слишком медленно. Как сделать, чтобы как будто раз в 1.5 кадра вызывалось? может можно как-нибудь поменять fps самого Sprita, не меняя fps всего Stage?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Как раз про твою проблему https://www.youtube.com/watch?v=zr3YuhgpuYg

Если надо что-то выполнять через определенные промежутки времени, используй таймер
__________________
Ко мне можно и нужно обращаться на ты)

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

Регистрация: Jul 2013
Адрес: Каскелен
Сообщений: 86
таймер до этого стоял... на 45мс, но он глючит (иногда быстрее-медленнее на момент становится), не совсем с одинаковыми промежутками срабатывает... видимо из-за того, что сильно часто. Поменял на EnterFrame - стало равномерно, но теперь не могу подогнать скорость до нужной по EnterFrame... получается, что отдельно у каждого DisplayObjecta нельзя менять скорость кадров?

Старый 24.02.2018, 19:11
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 4  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
таймер то тикает равномерно просто флэш скорее всего не успевает обновить экран из-за низкого fps.
Если таймер тикает раз в 45 ms, то fps должен быть не меньше 23(1000/45).А лучше брать с запасом 30+
Цитата:
олучается, что отдельно у каждого DisplayObjecta нельзя менять скорость кадров?
нет конечно, fps задается глобально для всей флэшки.
Вообще завязываться на enterframe дурная практика т.к. в зависимости от нагрузки он может тикать сильно медленнее заявленного fps.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от nelco Посмотреть сообщение
таймер до этого стоял... на 45мс, но он глючит (иногда быстрее-медленнее на момент становится), не совсем с одинаковыми промежутками срабатывает... видимо из-за того, что сильно часто. Поменял на EnterFrame - стало равномерно, но теперь не могу подогнать скорость до нужной по EnterFrame... получается, что отдельно у каждого DisplayObjecta нельзя менять скорость кадров?
45 это не слишком часто. У TimerEvent можно вызывать метод updateAfterEvent() в обработчике. Это вынудит флеш плеер перерисовать всю картинку по событию. Тогда все будет работать плавно
Код AS3:
private function onTimer(e:TimerEvent):void {
   e.updateAfterEvent();
}
Цитата:
Вообще завязываться на enterframe дурная практика т.к. в зависимости от нагрузки он может тикать сильно медленнее заявленного fps.
А ты бы какое решение предложил? Во флеше даже таймер зависит от FPS. Поток то один, никуда от этого не денешься.
Завязываться на EnterFrame это не дурная практика, а самая обычная, используемая везде. Единственное, что нужно усорвешенствовать обновление по EnterFrame и добавить замер длительности предыдущего кадра (delta time), и все расчеты производить с учетом этой величины
__________________
Ко мне можно и нужно обращаться на ты)

Старый 24.02.2018, 20:16
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 6  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Сообщение от caseyryan Посмотреть сообщение
А ты бы какое решение предложил?
Код AS3:
tween=new Tween(null,"",None.easeNone,0,1,0.3,true);
tween.addEventListener(TweenEvent.MOTION_CHANGE,update);
tween.start();
 
private function update(e:TweenEvent):void {
    // обновляем анимацию в зависимости от tween.position
    if (tween.position==1) {
        tween.stop();
        tween.removeEventListener(TweenEvent.MOTION_CHANGE,update);
        tween=null;
    }
}
работает как часы

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от undefined Посмотреть сообщение
Код AS3:
tween=new Tween(null,"",None.easeNone,0,1,0.3,true);
tween.addEventListener(TweenEvent.MOTION_CHANGE,update);
tween.start();
 
private function update(e:TweenEvent):void {
    // обновляем анимацию в зависимости от tween.position
    if (tween.position==1) {
        tween.stop();
        tween.removeEventListener(TweenEvent.MOTION_CHANGE,update);
        tween=null;
    }
}
работает как часы
Ты полагаешь, что твин не на энтер фрейме работает?
__________________
Ко мне можно и нужно обращаться на ты)

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

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Ты полагаешь, что твин не на энтер фрейме работает?
хочешь сказать он втихаря подсовывает что-то на стейдж в надежде что никто его выкидыши не зачистит?

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Привязывайся к прошедшему времени с последнего кадра. Так все делают.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от undefined Посмотреть сообщение
хочешь сказать он втихаря подсовывает что-то на стейдж в надежде что никто его выкидыши не зачистит?
Не понял что ты хотел сказать. Зачем ему что-то подсовывать на стейдж? Во флеше всё обновление завязано на кадры. И события проходят тоже в кадрах. Тут и твины и таймеры зависят от FPS. Поэтому delta time это самое верное решение, и не придется городить никаких огородов
__________________
Ко мне можно и нужно обращаться на ты)

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

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

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


 


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


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