Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблемка MouseEvent.MOUSE_WHEEL (http://www.flasher.ru/forum/showthread.php?t=162731)

mks81 03.08.2011 19:09

Проблемка MouseEvent.MOUSE_WHEEL
 
Почему delta не реагирует на прокрутку колесика мыши, а начинает реагировать только после того как хоть раз кликнешь в контейнере?
Фрагмент кода:
Код AS3:

bodySchedule.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
private function mouseWheelHandler(e:MouseEvent):void
{
        mouseWheel(e);
}


КорДум 03.08.2011 19:31

Объект должен быть в фокусе.

mks81 03.08.2011 21:09

А как программно навести фокус на спрайт?

preyko 03.08.2011 21:13

stage.focus = "имя спрайта";
Может и поможет.

КорДум 03.08.2011 21:30

Код AS3:

stage.focus = ссылкаНаОбъект;


mks81 03.08.2011 21:40

Да, фокус таким образом наводится(контейнер обводится желтой рамкой), но проблема не решается, пока не кликнешь, колесико не реагирует

КорДум 03.08.2011 21:41

Вы подписываете сам объект на колесико. А нужно на stage. Тогда фокус нужен на стейдже [?].

mks81 04.08.2011 11:39

Я не понял, ничего не получается... Сейчас распишу поподробней, может все таки мой косяк
1. Основной класс Main, в нем помещен контейнер: bodySchedule (спрайт)
Код AS3:

this.addChild(bodySchedule);

в этом контейнере расположен еще один контейнер container (спрайт):
Код AS3:

bodySchedule.addChild(container);

в котором располагаются объекты ScalingFlight:
2. Класс ScalingFlight
Код AS3:

public class ScalingFlight extends SimpleButton

эти объекты являются просто анимированными кнопками

3. Класс UIScrollBar для прокрутки не вместившихся в контейнер кнопок, пришлось написать самому, т.к. fl.controls.ScrollBar слишком много весит
В основном классе Main располагаются экземпляры класса UIScrollBar (спрайты из которых состоит скроллбар):
Код AS3:

q = new UIScrollBar();

они размещены в контейнере bodySchedule
далее установлен прослушиватель колесика мыши:
Код AS3:

bodySchedule.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);

он передает данные считанные с колесика мыши в класс UIScrollBar для обработки:
Код AS3:

private function mouseWheelHandler(e:MouseEvent):void
{
        q.mouseWheel(e);
}

ну вот собственно и все. Пока не кликнешь в любой точке stage колесико мыши не реагирует, как избавиться от этой проблемы?
Код AS3:

stage.focus = bodySchedule;

не помогает, спрайт обводится желтой рамкой, а проблема остается, да и сама желтая рамка при запуске клипа не устраивает, что делать?

arkadattx 04.08.2011 11:56

Как-то так
Код AS3:

addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);


mks81 04.08.2011 12:12

Цитата:

Сообщение от arkadattx (Сообщение 1017816)
Как-то так
Код AS3:

addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);


и че? так тоже самое

coffee2espresso 04.08.2011 12:31

Попробуйте событие event.ACTIVATE. Как только мышь появится в области флэш проигрывателя, должно запускаться ваше событие. Тоесть зарегестрируйте ваше событие внутри прослушивателя event.ACTIVATE. Пишу на телефоне поэтому кое привести не могу.

mks81 04.08.2011 13:36

Не получается, я в панике

coffee2espresso 04.08.2011 13:45

Не может быть.

mks81 04.08.2011 13:48

я честно говоря не совсем понял как правильно это сделать:
Цитата:

Сообщение от coffee2espresso (Сообщение 1017823)
Попробуйте событие event.ACTIVATE. Как только мышь появится в области флэш проигрывателя, должно запускаться ваше событие. Тоесть зарегестрируйте ваше событие внутри прослушивателя event.ACTIVATE. Пишу на телефоне поэтому кое привести не могу.


coffee2espresso 04.08.2011 14:04

Если никто не переведет мою мысль в код. То приеду домой напишу. На телефоне набирать это ужас.

DaFive 04.08.2011 14:12

Цитата:

Сообщение от coffee2espresso (Сообщение 1017862)
Если никто не переведет мою мысль в код. То приеду домой напишу. На телефоне набирать это ужас.

Код AS3:

addEventListener(Event.ACTIVATE, onActivateHandler);
funciton onActivateHandler(evt:Event):void
{
addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler);
}
 
function wheelHandler(evt:MouseEvent):void
{
экшн
}

Так чтоли?

coffee2espresso 04.08.2011 14:25

Так, да.

mks81 04.08.2011 14:34

Так вообще не реагирует на колесико, хоть кликай хоть не кликай

Добавлено через 27 минут
Жесть!
Вопрос снимается, оказалось что такой эффект получается только когда я запускаю код из Adobe CS5.5.
Если же запускаешь уже скомпиленный swf колесико сразу же реагирует, и без всяких Event.ACTIVATE, stage.target и тп
Всем спасибо за помощь

DEVORON 13.03.2015 06:23

Я добавлю от себя на случай, если кто-то будет искать.
Приложение вконтакте не отлавливает колесико мыши. Нужно зайти на страницу настроек приложения и выставить режим wmmode - direct.

undefined 13.03.2015 15:53

еще добавлю:
на маках колесо не ловится вернее в flash ide оно работает, но после публикации увы.Обходится отловом колеса в js и передачей флэшке.
Цитата:

...и сама желтая рамка при запуске клипа не устраивает, что делать?
Код AS3:

stage.stageFocusRect = false;



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

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