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

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

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

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Всегда пользуюсь setInterval, в силу того, что:
# разные составляющие анимации могут воспроизводиться с разной скоростью
# независимость от FPS в проекте и продолжительности анимации
Не понимаю, для чего вообще нужен onEnterFrame: пусть номинально, но он все-таки жестко диктует поведением анимированной с его помощью деталью ролика..

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

Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
setInterval больше для анимации, а onEnterFrame для кодинга.

Старый 12.09.2009, 10:38
Zik. вне форума Посмотреть профиль Отправить личное сообщение для Zik. Найти все сообщения от Zik.
  № 3  
Ответить с цитированием
Zik.
 
Аватар для Zik.

Регистрация: Nov 2007
Сообщений: 1,724
onEnterFrame можно легко первратить в setInterval(); и производительность будет куда лучше

Старый 12.09.2009, 10:43
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от ZIK68 Посмотреть сообщение
легко первратить в setInterval()
Например как?

Старый 12.09.2009, 11:08
Zik. вне форума Посмотреть профиль Отправить личное сообщение для Zik. Найти все сообщения от Zik.
  № 5  
Ответить с цитированием
Zik.
 
Аватар для Zik.

Регистрация: Nov 2007
Сообщений: 1,724
это
Код AS1/AS2:
var shet:Number = 0;
var fps:Number = 12; //переменная fps  равна fps ролика
function privet():Void {
	if (shet == fps) {
		trace("Привет!");
		shet = 0;
	} else {
		shet++
	}
}
onEnterFrame = privet;
эквивалентно
Код AS1/AS2:
function privet():Void {
	trace("Привет!");
}
setInterval(privet, 1000);

Старый 12.09.2009, 11:35
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 6  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Можно. Вопрос - зачем такие сложности?

Против:

1. Усложнение организации процессов с разными скоростями.
Вот, например, у меня почти во всех проектах есть функция, которая делает плавное появление/убираение объектов на сцене. Делает это она с помощью изменения альфы и при этом используется setInterval. Ей я в качестве одного аргумента передается величина интервала. Это гибко - одни объекты появляются с одной скоростью, другие - с другой, и т.д. Зависист только от времени, которое я передаю как аргумент. А с использованием onEnterFrame придется в эту ф-ю вводить еще и дополнительные телодвижения для коррекции, так как без этого привязка будет строго к частоте кадров, и сделать быстрее-медленнее я не смогу.
setInterval - пусть с оговорками - но мы можем явно задать частоту выполнения каких-либо действий, onEnterFrame - никак.

2. Необходимость в привязке к мувику или _root. Потенциальный лишний мусор на сцене.
Для onEnterFrame нужен мувик-привязка (this.onEnterFrame = ..., mc1.onEnterFrame), для интервала- не нужен.
Если у вас проектик небольшой - пофигу, если нет, и используются несколько периодических действий? Придется навешивать несколько onEnterFrame на разные объекты, включая this. А если это нежелательно? Или если уже все объекты заняты - придется создавать мусорные.
Для достаточно сложных проектов - опять-таки - всегда нужно помнить, куда что привязано и следить, чтобы мувик с нужной функцией всегда был на сцене.

3. Остановка процесса.
То же самое - с остановкой процесса. Для интервала - достаточто clearInterval. Для onEnterFrame - нужно сделать delete mc.onEnterFrame, то есть для безусловной остановки нужно удалять ссылку на описанную функцию с мувика.
Можно сделать проверку выполнения условий внутри onEnterFrame, скажете вы, но вопрос - зачем таие сложности - непрерывные дополнительные вычисления?

Есть еще аргументы против onEnterFrame.
А что вы можете сказать "за"?

Добавлено через 10 минут
4. Негибкость с параметрами.
В интервальную функцию я могу легко передать параметр:
Код AS1/AS2:
ID =  setInterval (doItEasy, 10, 'Привет!');
 
function doItEasy(mess:String) {
 trace(mess);
}
Для передачи аргумента в функцию onEnterFrame нужны дополнительные телодвижения:

Код AS1/AS2:
mc.mess = 'Привет!';
mc.onEnterFrame = doItHard;
function doItHard() {
 trace(this.mess);
}


Последний раз редактировалось mooncar; 12.09.2009 в 11:46.
Старый 12.09.2009, 12:18
Zik. вне форума Посмотреть профиль Отправить личное сообщение для Zik. Найти все сообщения от Zik.
  № 7  
Ответить с цитированием
Zik.
 
Аватар для Zik.

Регистрация: Nov 2007
Сообщений: 1,724
ммм.... ну убедили...
но когда важна скорость, то лучше onEnterFrame использовать

Старый 12.09.2009, 12:32
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 8  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Можно понудничать? Контрольный выстрел:
А что значит - если нужна скорость? И какие тут достоинства у onEnterFrame?
Мне правда интересно. Просто "для скорости" в интервальной функции я могу задать промежутки выполнения каких-то действий меньше частоты отрисовки кадров (хотя на флешкин таймер все ругаются, я еще правда не сталкивался), а в onEnterFrame как это сделать?


Последний раз редактировалось mooncar; 12.09.2009 в 12:38.
Старый 12.09.2009, 13:05
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от mooncar Посмотреть сообщение
я могу задать промежутки выполнения каких-то действий меньше частоты отрисовки кадров
Зачем?

Старый 12.09.2009, 13:00
Zik. вне форума Посмотреть профиль Отправить личное сообщение для Zik. Найти все сообщения от Zik.
  № 10  
Ответить с цитированием
Zik.
 
Аватар для Zik.

Регистрация: Nov 2007
Сообщений: 1,724
Цитата:
Просто "для скорости" в интервальной функции я могу задать промежутки выполнения каких-то действий меньше частоты отрисовки кадров, а в onEnterFrame как это сделать?
см. пример кода выше

Цитата:
А что значит - если нужна скорость? И какие тут достоинства у onEnterFrame?
было дело, надо было проверять на столкновение пули и двигать их
использовал setInterval - через некоторое время начинало тормозить
заюзал onEnterFrame - все прекрасно стало работать


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

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

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


 


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


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