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

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

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

Регистрация: Jul 2009
Сообщений: 12
Тело пишу под FrameRate, предварительно насовав кучу
boolean или int - функций среди var-ов.
Само собой иногда приходится делать removeListener.

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

Регистрация: Nov 2007
Сообщений: 1,724
я пишу третим способом

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

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

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

Регистрация: Nov 2006
Сообщений: 33
Цитата:
Сообщение от MonkDead Посмотреть сообщение
Странно что все кроме __etc, пишут что конструктор что-то возвращает .
Код AS3:
public function Main():void
Вообще то он ничего не возвращает!
void - это и значит, что ничего.
В языке си это обязательный параметр синтаксиса.
ActionScript же куда более "лоялен" и подобное прощает.

Старый 12.07.2009, 21:14
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 15  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Я чаще делаю функции-хендлеры не private, а protected. Правда, в зависимости от случая.

Стиль названия - clickHandler или someObjectClickHandler (если не к this).

Третий способ.
__________________
Дело не в тебе

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

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
void - это и значит, что ничего.
В языке си это обязательный параметр синтаксиса.
ActionScript же куда более "лоялен" и подобное прощает.
Конструктор не может возвращать никаких значений, даже если захочет, поэтому явно показывать это не нужно. Методы же, напротив, могут возвращать значение, а могут не возвращать, поэтому нужно явно указывать это, чтобы было понятно, что разработчик не забыл его там написать. Также отсутствие void у конструктора помогает отличить его от метода.

Старый 13.07.2009, 05:31
vvvvvvf вне форума Посмотреть профиль Отправить личное сообщение для vvvvvvf Найти все сообщения от vvvvvvf
  № 17  
Ответить с цитированием
vvvvvvf
[+1 08.07.09]

Регистрация: Mar 2009
Сообщений: 107
Код AS3:
		var mySp:Sprite = new Sprite();			
		mySp.addEventListener(Event.ENTER_FRAME, function(e:Event):void {
			trace('enter frame');
		});
У меня сложилось такое впечатление, что подобный код будет сильно засорять память.
Я где-то прочитал, что если вызывать подобную конструкцию, то при каждом запуске события функция и все её содержимое создается заново, а предыдущая её версия не удаляется.

Правда ли это?

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

Регистрация: Nov 2006
Сообщений: 33
Цитата:
Сообщение от udaaff Посмотреть сообщение
Конструктор не может возвращать никаких значений, даже если захочет, поэтому явно показывать это не нужно. Методы же, напротив, могут возвращать значение, а могут не возвращать, поэтому нужно явно указывать это, чтобы было понятно, что разработчик не забыл его там написать. Также отсутствие void у конструктора помогает отличить его от метода.
У методов, если они не возвращают ничего, можно и не писать :void - интерпретатор это поймет по наличию/отсутствию ключевого слова return.
А имя конструктора в си-подобных синтаксисах всегда такое же, как и имя класса - и только этого с лихвой хватает, чтобы не спутать конструктор ни с чем другим (к тому же можно смотреть так: ф-я, начинающаяся в большой буквы и есть конструктор). Ведь нельзя читать-воспринимать код класса вне его контекста.
З.Ы. А в Delphi, например, конструктор определяется словам constructor.

Цитата:
Сообщение от vvvvvvf Посмотреть сообщение
Код AS3:
		var mySp:Sprite = new Sprite();			
		mySp.addEventListener(Event.ENTER_FRAME, function(e:Event):void {
			trace('enter frame');
		});
У меня сложилось такое впечатление, что подобный код будет сильно засорять память.
Я где-то прочитал, что если вызывать подобную конструкцию, то при каждом запуске события функция и все её содержимое создается заново, а предыдущая её версия не удаляется.

Правда ли это?
Правда. Но если это всегда держать в голове - то это нормально. Т.е. если вы вешаете на одно событие один обработчик и не планируете его удалять в процессие исполнения кода - то можете так делать. Ничего страшного, если такое не далается в цикле и т.п.
Детальнее: сам код/значение вычищается из памяти, когда на на него никто больше не ссылается. Грубо говоря, в данном примере на него ссылается EventListener. Когда он перестанет ссылаться, код удалится из памяти. Но чтобы он перестал ссылаться - нужно сделать removeEventListener. В этом примере вам это не удастся. Нужно иметь ссылки на ф-ю, которуй вы удаляете из EventListener. А ссылка эта в примере не сохраняется ни в какую переменную - она генерируется "на лету" и сразу в стек параметров. Поэтому вы не сможете ее узнать.
Вот иной вариант:
Код AS3:
var mySp:Sprite = new Sprite();
var f:Function = f(){trace('yo!'); mySp.removeEventListener(Event.ENTER_FRAME, f)};
mySp.addEventListener(Event.ENTER_FRAME, f);
Но!!! Не используйте бездумно подобный код! Ибо за пределами видимости переменных mySp и f не будет! Учитывайте это!


Последний раз редактировалось GydruS; 13.07.2009 в 06:22.
Старый 13.07.2009, 08:53
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 19  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
что-то тема анонимных функция часто плавает последних 2 недели...
http://www.flasher.ru/forum/showpost...77&postcount=7
http://www.flasher.ru/forum/showpost...4&postcount=19

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
У меня вопрос.
Просто к слову, почти оффтоп:

Код AS3:
function oneTimeHandler(e:Event){
    //bla-bla
    var useCapture=(e.eventPhase==EventPhase.CAPTURING_PHASE)?true:false;
    e.target.removeEventListener(e.type,arguments.callee,useCapture);
}
Это же всегда сработает, правда? Ну, вызвется один раз и перестанет слушать сразу, как бы этот обработчик не подписывали на какое угодно событие.
А то у меня чувство, что я не до конца разобрался с т.н. Event flow'ом...

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

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

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


 


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


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