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

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

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

Регистрация: Jan 2010
Сообщений: 19
По умолчанию таймер в аттаченом клипе, как ?

эх, как всегда - понимаю, что решение совсем простое, но что-то ничего в голову не приходит

Вопрос такой: каким образом сделать таймер(т.е. функцию, вызывающую себя каждый фрейм), но чтобы он был в клипе, который мы можем брать или не брать из библиотки.
Суть в том, что на этот таймер не хочется тратить даже одной функции мэйнкода.

Т.е. таймер должен быть абсолютно автономен от главного кода(это было бы не сложно, если бы он всег присутствовал на экране, тут помогло бы "onClipEvent (enterFrame) {"), но он может и не присутствовать, а никаких проверк из когда в главном кадре, типа "if (timerOnStage){" не хочется делать.

В общем, суть такая - нужно сделать абсолютно независимый клип-таймер.
Подскажите идейку какую, а ?

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Войди в клип два раза клинкув по нему и в первом кадре пиши нужны код, например:
Код AS1/AS2:
this.onEnterFrame = function() {
	trace("Если меня загрузили из библиотеки, то я пишу это сообщение каждый кадр, пока меня не удалят");
};

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

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

Напишите простую функцию где-нибудь в конце, и используйте ее без любых проверок.
Код AS1/AS2:
function manageTimer (dir:String) {
	switch (dir) {
		case 'on':
		this.createEmptyMovieClip('timer_mc', this.getNextHighestDepth());
		timer_mc.onEnterFrame = function  () {
			trace('тик-так');
		};
		break ;
		case 'off':
		timer_mc.removeMovieClip();
		break ;
	}
}
В любой момент, ничего не проверяя:
Код AS1/AS2:
manageTimer ('on'); 
//или
manageTimer ('off');


Последний раз редактировалось mooncar; 20.01.2010 в 03:11.
Старый 23.01.2010, 02:30
Boris вне форума Посмотреть профиль Отправить личное сообщение для Boris Найти все сообщения от Boris
  № 4  
Ответить с цитированием
Boris

Регистрация: Jan 2010
Сообщений: 19
Ага, Samana - огромное спасибо !
Я пытался использовать:
onClipEvent (enterFrame){

}

mooncar, тут всё просто - например, этот код выполняется для 100 уровней, пусть игры, и всего на одном - нужен этот таймер.
и что теперь ? в 99 случаях, бесмысленно обращаться к тесту ~if(timerPresence == true) ?
А если нужен не таймер, а подобная функция, да ещё подключаться не одна ? но действительно в пропорции 1 к 99 "бесмысленных" вызовов ?
В общем, резон мне кажется есть
Ваше предложение с manageTimer ('on'); тоже весьма интересно, обязательно подумаю над такой техникой на будущее.
Спасибо.

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

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

- что вам что аттачить ваш мувк-таймер из библиотеки, что писать manageTimer('on'); - все равно нужно явно в коде писать.
- что вам ремувать приаттаченный мувик, что писать manageTimer('off') - опять нужно явно указать.
(Если вы приаттачили мувик в каком-то кадре, он у вас так и будет висеть, пока вы его не удалите явно, в какой бы кадр вы не перешли. Это я к тому, чтобы вы не уповали на "автоматизм".)

Так что вам все равно придется что-то сообщать плееру по поводу таймера, только в моем случае меньше всяких затрат и почвы для глюков от асинхронности.
И я не очень понял, при чем тут 99 вызовов. Вы вызываете функцию только когда нужно.

PS. Я кажется понял. Не путаете ли вы определение функции с ее вызовом? И отсюда может эти слова по поводу "траты" кода...
Если у вас мувик с функцией находится в библиотеке, и вы намереваетесь его аттачить при исполнении, значит мувик должен быть экспортирован. В любом случае ваша функция будет скомпилирована, находится ли она в "мэйнкоде", или спрятана в экспортируемеый из библиотеки мувик.
Не верите - проверьте. Создайте мувик, запишите в нем код с ошибкой, удалите его со сцены и сделайте его в библиотеке экспортируемм для AS. При компиляции у у вас появится ошибка. Снимите галочку экспорта, напишите любой бред в этом мувике - и компилятор ничего не заметит, так как мувик в ролик не попадает.


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

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

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


 


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


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