Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Отловить выход курсора за пределы флеша без JS (http://www.flasher.ru/forum/showthread.php?t=108314)

MyXus 19.02.2008 20:23

Отловить выход курсора за пределы флеша без JS
 
Всегда считал что сабж невозможен. И вот заказчик ткнул меня носом в http://www.volvocars.com/ru/models/V...s/default.aspx . Пару часов провисел над декомпайлером, но так и не допёр, какое событие определяет вход/выход флешки за пределы ролика (нужный handler висит на onRollOut / onDragOut, но как это может работать - хз).
JS'а там нет.

feanarf 19.02.2008 21:10

ставим большооой прозрачный прямоугольник поверх всего этого дела и лепим ему событие на RollOut-прятать курсор, на RollOver-показать

Molecula 19.02.2008 21:22

Типа такого что-ли?
_http://www.av.kharkov.com/out.html
_http://www.av.kharkov.com/out2.html

Первый без реакции за пределами, второй, сы.

D12 19.02.2008 21:31

Однажды кто-то на форуме оставил этот монускрипт=)

Код:

Stage.align="TL";
Stage.showMenu=false;
Stage.scaleMode="noScale";
//
Stage.addListener(o=_global.mouseController=_level0.createEmptyMovieClip("$$$MOUSE$$CONTROLLER$$",-16381));
o.f=function(w,h){with(this){
_x=_y=0;
lineStyle(0,0,0);beginFill(0,0);
lineTo(w,0);
lineTo(w,h);
lineTo(0,h);
endFill();
};};
o.onResize=function(){this.f(Stage.width,Stage.height);};o.onResize();
addProp=function(o,p,f){o.addProperty(p,function(){return o[p];},f);};
addProp(o,"mouseOver",function(mouseOver){trace((mouseController.txt.text=(mouseOver)?("[мышка во флэшке]"):("[мышка вне флэшки]")));});
o.useHandCursor=false;
o.createTextField("txt",0,0,0,0,0).autoSize=true;//

p=function(o,m,f,n){o[m]=function(){f();this[n]();trace(n);}};
pr=function(o,m,f){for(var i=0;i<o.length;i++){for(var i2=0;i2<m.length;i2++){p(o[i],m[i2],f,(m[i2].charAt(2).toLowerCase()+substring(m[i2],4,m[i2].length-2)));};};};
o=[MovieClip.prototype,Button.prototype];
pr(o,["onRollOver"],function(){_global.mouseController.mouseOver=true;});
pr(o,["onDragOver"],function(){_global.mouseController.mouseOver=true;});

pr(o,["onRollOut"],function(){_global.mouseController.mouseOver=false;});
pr(o,["onDragOut"],function(){_global.mouseController.mouseOver=false;});
pr(o,["onReleaseOutside"],function(){_global.mouseController.mouseOver=false;});

pr(o,["onPress","onRelease"]);
//

attachMovie("myButton","but",0).stop();
but._x=but._y=200;
but.rollOver=function(){trace((this.text="навели на"+this));this.gotoAndStop(2);};
but.releaseOutside=function(){this.gotoAndStop(2);};
but.rollOut=function(){trace((this.text="отвели от"+this));this.gotoAndStop(1);};
but.press=function(){trace((this.text="нажали на"+this));};
but.release=function(){trace((this.text="отжали "+this));};


MyXus 19.02.2008 21:48

Цитата:

Сообщение от feanarf
ставим большооой прозрачный прямоугольник поверх всего этого дела и лепим ему событие на RollOut-прятать курсор, на RollOver-показать

Вот ведь чертовщина! Спасибо!

Цитата:

Сообщение от D12
Однажды кто-то на форуме оставил этот монускрипт=)

Жуткий монускрипт, но смысл понятен. И ведь работает заразо! Жесть -)

MyXus 20.02.2008 21:50

А, черт. Все-равно не универсальное решение. В мувиках, созданных программно после выполнения этого кода, все eventHandlers не будут включены в схему.

Я сейчас написал синглтон, который на onEnterFrame проверяет все интерактивные мувики на Stage и, если пользователь переписал eventHandler, переписывает этот eventHandler так, чтобы синглтон получал оповещение onEvent.

Это абсолютно рабочая схема, но, очевидно-тормозная. Для маленьких проектов ( мувиков на Stage < 1000 ) тормоза будут не критичны. Дальше - ХЗ. Если кто придумает более эффективную схему - отпишитесь плиз.

D12 20.02.2008 22:29

А что её придумывать всё есть на AS3 :)

Fernando Costa 20.02.2008 23:05

а что если создать кнопку-рамку в один пиксел - на всю флешку, и обрабатывать на ней ролловер/роллаут. При роллауте проверять позицию курсора. Может такое работать?

udaaff 21.02.2008 09:38

Вариант: повесить прозрачный мувик на всю сцену, и проверять hitTest'om в onEnterFrame наличие курсора на ним.

MyXus 21.02.2008 12:29

Люди, написавшие последние два поста, вы, вообще, понимаете о чём речь?


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

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