Бесплатно скачать Adobe Flash Player
Flash Ripper RSS Readers

Stage.mouseLeave, долгожданное событие (обновлено)

В ActionScript 3 появилось событие stage.onMouseLeave. Это означает, что теперь можно забыть о тех темных временах, когда флэш-кодеры путем уловок и ухищрений заставляли flash player определять момент выхода мышки за флэшку.

Теперь можно писать так (prof, спасибо за поправки!):

package {
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.text.TextField;
	import flash.events.Event;
	public class stageOnMouseLeave extends Sprite /*MovieClip*/{
		private var textTest:TextField;
		private var intCount:int=0;
		public function stageOnMouseLeave(){
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			stage.showDefaultContextMenu=false;
			stage.addEventListener(Event.MOUSE_LEAVE, onStageLeave);
			textTest = new TextField();
			addChild(textTest);
			textTest.text = "Не покидай меня!";
		}
		public function onStageLeave(event:Event):void{
			textTest.text = "Ты бросил меня\n"+ ++intCount + " раз.";
		}
	}
}

Это работающий пример, его можно компилировать из консоли (т.е. просто написав: mxmlc stageOnMouseLeave.as. Вы ведь уже добавили путь к mxmlc, компилятору actionscript3 в переменную окружения patn, как было описано в компиляции flex-приложений из командной строки.)

Результат:

 

Писал Rost, 4 Май 2006 17:29

Найдены баги:

Что это:
stage.addEventListener(flash.events.Event.MOUSE_LEAVE...
Я имею в виду конкретно вот это:
flash.events.
Убери, не позорь свою седую голову :)
И коммент мой потом тоже убери - дабы мне не опозорить свою :)

prof - 4 Май 2006 19:33

Какой уж тут позор, я, как и многие сегодня (хочется в это верить), изучаю новый api предлагаемый нам as3 и что-то естественным образом кешируется в памяти, типа кусков хелпа, што ли ;-)

Не стану убирать ни того, ни другого: данная строка является единственной существенной во всем куске кода ;) Она должна быть самодостаточной, чтобы глядя только на нее, чел узнал как можно больше. Да и сам я пока не держу в голове все хитросплетение структур as3. Мне нравится максимально самодокументируемый код, пусть даже избыточный.

А любители ужимать код сделают это лучше моих скромных попыток уследить за развитием событий ;)

Рост - 4 Май 2006 20:55

К любителям ужимать код себя ни в коей мере не отношу, и даже буду ругаться, если таковым меня назовут :)
Просто лично меня это навело на сомнения, поясню:
если я вижу указание полного пути к какому-либо классу, имя которого мне знакомо (ди и не только мне) - значит, тут что-то не так, значит этот Event - это не тот Event, которого я знаю, а какой-то особенный и другой. Присмотрелся - нет, все тот же. А парой строк ниже этот же Event, по уже без указания полного пути. Нестыковочка...
Понятно, решать в данном случае не мне, однако имхо или везде одинаково, или никак уж тогда.

prof - 4 Май 2006 22:11

Добавлю: данная строка ничего хорошего нам не дает без другой строки:
public function onStageLeave(event:Event) {...
и следующей за ней.
Видимо, в данном случае ты хочешь всем сказать, что в этих строках разные Event-ы, так?

- 4 Май 2006 22:14

Согласен, нестыковка: профессиональный глаз об указание полного пути внутри методов класса споткнется.

В функции-обработчике (public function onStageLeave(event:Event)) Event как тип данных тот же самый, конечно.

Если это может кого-то ввести в заблужение, то код надо исправить, как ты предлагаешь, а старый оставлю тут истории ради:

package {
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.display.TextField;
import flash.events.Event;
public class stageOnMouseLeave extends Sprite{
private var textTest:TextField;
private var intCount:int=0;
public function stageOnMouseLeave(){
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.showDefaultContextMenu=false;
stage.addEventListener(Event.MOUSE_LEAVE, onStageLeave);
textTest = new TextField();
addChild(textTest);
textTest.text = "Не покидай меня!";
}
public function onStageLeave(event:Event):void{
textTest.text = "Ты бросил меня\n"+ ++intCount + " раз.";
}
}

Хорошо было бы иметь возможность указывать обработчику какой именно event ему придет, он ожидает общего объекта типа Event. Сказать обработчику, что придет именно нужное нам событие Event.MOUSE_LEAVE (да, хорошо было бы) -- ведь при назначении листенера используется конкрентная константа класса Event. А так между ними действительно есть разница. Но ничего этого я сказать на самом деле не хотел :)

Еще в обработчике явно не хватает той самой обработки аргумента "event", но и не нахожу, чего там обрабатывать, если и event.target и event.currentTarget возвращают одно и то же: [objeсt Stage].

Хотя, конечно, всегда есть чего обработать, если хорошо копнуть ;)

Рост - 4 Май 2006 23:48

А вообще я обо многом из этого раньше и не задумывался, а стоило бы уже начать ;№_))

Рост - 4 Май 2006 23:52

VerifyError: Error #1011: Method stageOnMouseLeave$iinit() contained illegal opcode 97 at offset 20.
at stageOnMouseLeave$iinit()

- 9 Май 2006 9:44

Это скорее всего из-за устаревшей версии Flash Player 8.5.

А у меня другое: "VerifyError: Error #1014: Class flash.display::TextField could not be found.
at global$init()
"

Это, как я догадываюсь, из-за моей слишком новой версии Flash Player 9 (тольок установленной). Сейчас попробую перекомпильнуть под новую версию.

Рост - 10 Май 2006 17:14

Круто. Оказывается, в этой версии класс TextField перенесен из пакета flash.display в пакет flash.text (вполне разумно, наверное)
А пакет flash.util переименован во flash.utils.

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


package {
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.display.TextField;
import flash.events.Event;
public class stageOnMouseLeave extends Sprite /*MovieClip*/{
private var textTest:TextField;
private var intCount:int=0;
public function stageOnMouseLeave(){
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.showDefaultContextMenu=false;
stage.addEventListener(Event.MOUSE_LEAVE, onStageLeave);
textTest = new TextField();
addChild(textTest);
textTest.text = "Не покидай меня!";
}
public function onStageLeave(event:Event):void{
textTest.text = "Ты бросил меня\n"+ ++intCount + " раз.";
}
}
}

Интересно то, что размер скомпилированного файла уменьшился с 14 Кб до 3 Кб.

Рост - 10 Май 2006 20:57

VerifyError: Error #1014: Class IBitmapDrawable could not be found.

- 11 Май 2006 5:10

AS3: переделать переделали...а баго-о-о-в то немеряно. Классы кочуют из пакета в пакет...Я считаю что пока рано на нем что-то серъезное начинать писать...

- 11 Май 2006 8:30



Это запись из категории 'Flex 2'. 10 еще cвежих:

Архивы по категориям:

3D-18, Adobe AIR-38, Animation-1, Apache Ant-1, Architecture-1, ARP-1, Art-26, Articles-26, AS3-57, Books-9, Business-3, Cairngorm-3, CI-1, Classes-10, Coding-31, Community-118, Components-19, Contests-30, conventions-1, Cool-Job-10, Debug-21, Design-28, Development-84, ecology-4, EMO-2, Events-17, Extensions-2, FAQ-9, FDS-1, Flash and html-8, Flash Player-38, Flash Updates-12, flash-on-devices-1, Flash-scene-1, flash10-4, FlashLite-2, Flex-49, Flex 2-80, flex4-3, flexcamp-2, Flickr-1, FMS-2, FPUG-61, frameworks-1, Games-20, Good Job!-44, HaXe-16, Health-2, Humor-11, Ideas-14, IV-1, JavaScript-2, Job-30, JSFL-8, Links-2, Linux-3, Maps-1, Math-8, Money-16, music-1, MXML-1, Open Source-16, Optimization-4, parenting-3, Patterns-2, Personalities-27, Philosophy-4, Politics-1, posters-1, Preloading-3, Productivity-10, PureMVC-11, Pv3d-1, Rafpug-5, Red5-3, Remoting-11, Resources-21, Ruby-6, SAAS-1, Security-11, SEO-9, Silverlight-7, Sound-3, sport-4, Strategy-122, Tamarin-2, Tools-113, Training-3, Trash-8, URAFPUG-14, Urgent-1, Usability-6, Video-6, VoIP-7, Wallop-1, Wishlist-3, XML-1, Архив всех записей (большой)

За последние месяцы:

Ноя 2008: Ноябрьская встреча RAFPUG 12 — для креативных, В продолжение темы флэш-блогов, весь Ноя

Окт 2008: Ура — вторая лицензия Alternativa3D уезжает в Киев!, Влещь на глагне III IIIIIII?, весь Окт

Сен 2008: Встречайте Open Source Flash Media Server — Mammoth, Срочно нужен толковый Flex-разработчик в Харькове (+Java), весь Сен

Авг 2008: Flex Gangsta Rap Video WTF Bro?, 27 сентября — встреча UAFPUG во Львове и плюшки от Adobe, весь Авг

Июл 2008: Тенденции среди работодателей: Adobe Flex, Adobe AIR, Silverlight, Спорт спасет красоту, которая спасет мир!, весь Июл

Июн 2008: Попытка предварительных выводов о встрече аниматоров, Онлайн трансляция встречи аниматоров в Донецке, весь Июн





Примечания:
Статус документа
: в процессе
   2002-2007 Производство: Рост Прибыли · О проекте · Подписка на новости (RSS)