![]() |
onMouseDown без DisplayObject. можно ли?
Можно ли отследить нажатие кнопки мыши без привязки к какому либо объекту?
|
нет...
|
Можно. Написал один способ, но жутко извращенный, но, тем не менее, рабочий. Напишу в блоге, когда он оживет.
|
Блог ожил.
Велкам: http://dev.etcs.ru/blog/as3/globalmouse/ |
а что мешает слушать в руте?
|
Можно проще - http://as3.ru/?p=23
(= |
А почему нельзя привязаться к stage? Он никуда не денется. Зачем цепляться к timeline, что есть просто спрайт, прицепленный к stage?
|
Лучше скажите чем заменить Mouse.addEventListener() в AS3 (чтобы сказать плееру, чтобы события прокрутки колеса не дублировались в браузер)? Похоже, Adobe в 9-м плеере просто забыли это сделать. :)
|
а правда, какой смысл все это делать? чем плох root для этого?
|
Dendroid, проверь с GlobalMouse, может браузер перестанет крутить :)
Timerlan, не привязываться к каким-либо рутовым классам (ну и к самому _root) — давняя привычка ещё со времени AS2. Ну и что касается решения miramax-а, то оно, безусловно, неплохое. Но есть пара недочетов, на мой взгляд: 1) (Самый главный) — необходимость наследования Document class от этого класса. Кому как, а мне такая цепочка наследования может помешать. 2) Все-таки привязка в InteractiveObject — на сцене висит прозрачный Sprite, который при перекрытии (а это произойдет безусловно) перестанет отлавливать события. 3) И все равно мы кликаем по какому-то визуальному объекту, а нужно было от этого уйти. В конце-концов, два решения — не одно :) Кому что удобнее, в общем. |
Не, GlobalMouse не помог, плеер просто не в курсе, что куда-то там к внутреннему клипу присоединились слушатели. Для этого в AS2 и есть специальный класс Mouse: присоеденились слушатели - больше события мыши не дублируются в браузер, хотя то же колесо можно слушать и не присоединяясь к Mouse.
Я, конечно, нашёл 2 дурацких решения, ужаснитесь тоже: 1. Если есть возможность грузить внешние файлы: создаём файл на AS2, где используем класс Mouse по назначению. После загрузки этого файлы в AS3 приложение, колесо мыши отвязывается от прокрутки html страницы (когда фокус на флэшке, естественно). 2. Если нет возможности грузить внешний файл, берём файл из пункта 1 в виде массива, превращаем в ByteArray, грузим в лоадер: Код:
var fdata:Array = [0x43575309,0x5a000000,0x789cab60,0x608d6760,0xe05fc0c0,0xc0c3c8e0,0x22c80004,0xce4cffff,0xffb76736,0x32a771,0x32b03140,0x81f3341e,0x6764610,0xcb37bfb4,0x38954166,0x1a2f0343,0x624a8a4f,0x6671496a,0x5e6a1143,0x90388303,0x50160042,0x120f1400]; |
Странно, я проверил, у меня скролл перестает работать.
http://etcs.ru/pre/MouseDown/global.html Ну а победа над разумом в GlobalMouse именно по второму пункту, как можно было заметить. |
И правда, у меня почему-то не получилось, может потому что компилял во Flash 9 alpha?
|
Сложно сказать, у меня нету альфы уж давно. Писалось под CS3.
Скомпили во флексе. |
Кстати, я там только что в коде нашёл аналогичный трюк, тоже swf генрится на лету:
Код:
var data:String = '43575309DC020000789C9590C14EC24014456FA7C50E22220A764363E20EE3CEA50B480071019A901097A669274252A68456E5135CB1ECC68DDFE007F92B38AF039198886116CDBC7BDF3D6FFAE6C83D02A50FE0CC40BB0C755A6CB95C36CC4F06BC7DE114A18F5EE47B612B9252F8C9389290DE4460123DC7A2D7422C923BAA23D9918998DDCCA8F0C32826A94F4DEDE85502973A41C5AD278350CC545406EBA6E154FBC3E9DA5D19FDE865358C6EBFCC879110A176B3EBDACE4C7841D01BC789904AA13777E6FEC8934FEA79FA5F9016C1B187D5E146D34D2D70C64D3765CAA9D1D75A140103EC02469CCC70051273EF394AB8480B1B791DD81B3859CBB5A36996E1DEFFE0EC05A75E5627920DCEED8A2ACFC9CA77B55025A14BD97DCE6A691EB6A914CBE08581B3413AD88554DC463ADC8554DA463A5A946859661D2C1061E2A1F10F502B0C16CBE0E53FE1366C83767C9CCD39513BCE8357B4A66757070E9AAAFC068E7B8A4A'; |
Читай пост #12 :D
Тоже самое, ессно. Мега-изврат, но работает же. И будет работать. |
А, точно. :)
А я-то уже подумал, что адекватное решение нашлось. Кстати, пробовал компоненты в CS3, под AS2, понятно, мыша нормально захватывается, а вот в приложении под АS3 c этим траблы, очень смешно комбобоксы начинают елозить. Похоже в Адоб либо не догадались, либо постеснялись использовать такой хак. :) |
Цитата:
Для особо одарённых придётся перегрузить методы getChildAt и addChildAt. Что бы nullSprite был полностью инкапсулированым. UPD: Что собственно я уже сделал. Добавив ещё несколько строк. Теперь всё точно ОК =) |
| Часовой пояс GMT +4, время: 13:02. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.