Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
1
AS 3.0

Не диспатчится событие

01.11.2014, 19:37. Показов 1289. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет. Не диспатчится событие.
Вот код:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package lib{
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.utils.*;
    
    public class EventsMouse extends Event{
        
        var mouse_hover:Boolean = false;
        var interval_hover:uint = 0;
        
        var dispatcher:CustomDispatcher = new CustomDispatcher();
        
        function EventsMouse(object:Object) {
            super("");
            object.EventsMouse = this;
            object.addEventListener(MouseEvent.MOUSE_UP, this.event_MOUSE_UP);
            object.addEventListener(MouseEvent.MOUSE_DOWN, this.event_MOUSE_DOWN);
            object.addEventListener(MouseEvent.MOUSE_OVER, this.event_MOUSE_OVER);
            object.addEventListener(MouseEvent.MOUSE_OUT, this.event_MOUSE_OUT);
            object.addEventListener(MouseEvent.MOUSE_MOVE, this.event_MOUSE_MOVE);
            object.addEvent = function(type:String, func:Function) {
                    object.addEventListener(type, func);
                }
        }
        
        private function event_MOUSE_UP(event:Event) {
            
        }
        private function event_MOUSE_DOWN(event:Event) {
            
        }
        private function event_MOUSE_OVER(event:Event) {
            this.interval_hover = setInterval(this.event_MOUSE_HOVER, 8);
        }
        private function event_MOUSE_OUT(event:Event) {
            clearInterval(this.interval_hover);
        }
        private function event_MOUSE_MOVE(event:Event) {
            
        }
        private function event_MOUSE_HOVER() {
            this.dispatcher.EventDispatch("mouseHover");
        }
        
    }
}
 
    import flash.events.EventDispatcher;
    import flash.events.Event;
    
    class CustomDispatcher extends EventDispatcher {
        public function EventDispatch(type:String):void {
            dispatchEvent(new Event("mouseHover"));
        }
    }
Метод EventDispatch выполняется 100%. Но почему-то, событие не посылается в поток(
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2014, 19:37
Ответы с готовыми решениями:

MaskedTextBox1 событие по системным часам - что должно вызывать это событие?
Добрый день! Помогите разобраться с ситуацией пожалуйста. На форме висит элемент maskedTextBox с...

Событие выбора строки при выборе мышкой событие обрабатывается два раза
Есть JTable, обрабатываю событие выбора строки след. образом: ListSelectionModel r =...

Принудительно вызвать событие, если произошло другое событие
Сразу оговорюсь, это тема про события, а НЕ про Windows Forms, да бы ни кто не переносил тему. В...

Как обработать событие click и событие нажития стрелки?
Допустим есть кнопка влево-вправо для горизонтального листания товаров. Как нужно кроссбраузерно...

20
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
01.11.2014, 19:44 2
А каким образом вы это событие слушаете?
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
01.11.2014, 21:10  [ТС] 3
TanaTiX, это объявляется вне класса.
ActionScript 3
1
2
new EventsMouse(myObject);
myObject.addEvent("mouseHover", func);
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
01.11.2014, 22:05 4
Я не вижу у объекта EventsMouse метода addEvent
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
01.11.2014, 22:27  [ТС] 5
TanaTiX, в конструкторе класса EventsMouse объекту myObject через указатель присваивается метод addEvent.
ActionScript 3
1
object.addEvent = function ...
Добавлено через 2 минуты
На всякий случай сразу скажу, что добавление прослушивателей таким способом на системные события работает.
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
01.11.2014, 23:01 6
Лучший ответ Сообщение было отмечено Randen как решение

Решение

Ок, теперь смотрим что происходит.
Создается некий объект, в конструкторе которого мы начинаем слушать другой объект. Событие не стандартное, само по себе не произойдет. Следовательно, что бы его поймать, необходима отправка этого события в этот объект. А куда у нас это событие отправляется? В CustomDispatcher, который как бы и не при делах. А когда мы в этот (CustomDispatcher) объект отправляем событие? Когда сработает приватный обработчик не существующего события. Очень похоже на кашу.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
01.11.2014, 23:42  [ТС] 7
TanaTiX, а что же делать? ПОдскажите, пожалуйста
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
01.11.2014, 23:50 8
Во-первых, я не перевариваю анонимные функции.
Во-вторых, большое количество кода в конструкторе - дурной тон.
В-третьих, какая конечная цель?
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
01.11.2014, 23:53  [ТС] 9
TanaTiX, ураа. Вы помоги. Спасибо. Сделал так:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package lib{
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.utils.*;
    
    public class EventsMouse extends Event{
        
        var mouse_hover:Boolean = false;
        var interval_hover:uint = 0;
        var prObject:Object;
        var dispatcher:CustomDispatcher = new CustomDispatcher();
        function EventsMouse(object:Object) {
            super("");
            this.prObject = object;
            object.EventsMouse = this;
            object.dispatcher = new CustomDispatcher();
            object.addEventListener(MouseEvent.MOUSE_UP, this.event_MOUSE_UP);
            object.addEventListener(MouseEvent.MOUSE_DOWN, this.event_MOUSE_DOWN);
            object.addEventListener(MouseEvent.MOUSE_OVER, this.event_MOUSE_OVER);
            object.addEventListener(MouseEvent.MOUSE_OUT, this.event_MOUSE_OUT);
            object.addEventListener(MouseEvent.MOUSE_MOVE, this.event_MOUSE_MOVE);
            object.addEventListener("mouseHover", this.event_MOUSE_MOVER);
            object.addEvent = function(type:String, func:Function) {
                    object.addEventListener(type, func);
                }
        }
        
        private function event_MOUSE_UP(event:Event) {
            
        }
        private function event_MOUSE_DOWN(event:Event) {
            
        }
        private function event_MOUSE_OVER(event:Event) {
            this.interval_hover = setInterval(this.event_MOUSE_HOVER, 8);
        }
        private function event_MOUSE_OUT(event:Event) {
            clearInterval(this.interval_hover);
        }
        private function event_MOUSE_MOVE(event:Event) {
            
        }
        private function event_MOUSE_MOVER(event:Event) {
            trace(5555);
        }
        private function event_MOUSE_HOVER() {
            this.dispatcher.EventDispatch("mouseHover", this.prObject);
        }
        
    }
}
 
    import flash.events.EventDispatcher;
    import flash.events.Event;
    
    class CustomDispatcher extends EventDispatcher {
        public function EventDispatch(type:String, object:Object):void {
            object.dispatchEvent(new Event("mouseHover"));
        }
    }
Добавлено через 2 минуты
А конечная цель состоит в том, чтобы отслеживать событие hover как в css. Т.е., происходит событие over и запускается событие hover, когда происходит событие out, тогда останавливается событие hover/

Добавлено через 1 минуту
А если я всё кроме "super" из конструктора вынесу в отдельную функцию и выполню эту функцию в конструкторе это не будет дурным тоном?
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
01.11.2014, 23:59 10
Randen, я наверное что-то не понимаю. А чем простой SimpleButton (исключительно как пример) не устраивает?

Добавлено через 4 минуты
Randen, супер даже если вы явно не вызываете, он все равно вызывается. Так что писать его или нет, если нет переопределения его функционала, дело исключительно стиля. Лично я в конструкторе если что и оставляю, то занесение объектов в поля класса и вызов инициализирующей функции при необходимости.
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
02.11.2014, 00:00  [ТС] 11
TanaTiX, "SimpleButton" я даже не знаю что это). Начал изучать as3 полторы недели назад, чтобы плеер сделать на сайт.
Так напрягало всё что обрубало мои идеи какими-то ограничениями. Наконец-то нашел все решения.

Добавлено через 1 минуту
TanaTiX, если super'а нету, то выдает ошибку "Не удалось найти конструктор по умолчанию в базовом классе"
0
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
02.11.2014, 00:20 12
Цитата Сообщение от TanaTiX Посмотреть сообщение
супер даже если вы явно не вызываете, он все равно вызывается
Класс extends Event и первым параметром строковую константу ожидает.
Цитата Сообщение от Randen Посмотреть сообщение
А если я всё кроме "super" из конструктора вынесу в отдельную функцию и выполню эту функцию в конструкторе это не будет дурным тоном?
Шлак не испортить! Вам не нужно думать о тоне, когда Вы фигню делаете. Всех программистов устраивает то что есть, а Вам hover нужен. Этот код с точки зрения программирования хуже сделать невозможно.
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
02.11.2014, 00:25  [ТС] 13
bus,
Этот код с точки зрения программирования хуже сделать невозможно.
Зачем вы меня обижаете?

Добавлено через 2 минуты
Мне нужен Hover. Такая зачада. Почему вы считаете что это плохо?
Я хочу сделать так, что когда курсор находится над полосой прогресса загрузки в плеере(ну или выбора позиции времени, смотря как называть), чтобы выводилась маленькая табличка времени, на которое указывает курсор.
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
02.11.2014, 00:29 14
bus, я за полторы недели делал гораздо более худшие вещи, так что нет предела совершенству

Добавлено через 2 минуты
Randen, два события MOUSE_OVER, MOUSE_OUT - они подойдут?
Более того, если использовать указанный SimpleButton (как же я его не люблю), то можно всплывающие подсказки нарисовать в одном из состояний/кадров объекта. Но это быстрое решение, с плохой гибкостью в разработке.
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
02.11.2014, 00:32  [ТС] 15
Это даже не основная причина востребованности в "Hover".
Представьте есть кнопка плей. У неё 6 состояний. По 3 состояний на плей и на паузу. Пассивное, активное(hover) и нажатое.
Сейчас кнопка стоит на паузе. Если на неё навести курсор, то она перейдет во 2-ое состояние(hover). Если нажать, то 3е состояние. Когда отпускаем, кнопка меняется на режим плей. И, получается, что кнопка в режиме плей, после таких манипуляций остается в состоянии 1(пассивное), хотя курсор находится над кнопкой. А должно быть состояние 2(активное). Это потому, что кнопка не получала событие Over.

Вот именно для этого мне нужно было событие Hover.
0
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
02.11.2014, 00:32 16
Цитата Сообщение от TanaTiX Посмотреть сообщение
bus, я за полторы недели делал гораздо более худшие вещи, так что нет предела совершенству
А я делал то, во что сейчас и сам не верю, но если бы мне сказали, что это бред, я бы согласился.
Цитата Сообщение от Randen Посмотреть сообщение
Зачем вы меня обижаете?
И в мыслях не было. Не буду повторяться, но Вы делает то, что делается не так.
Вы потратили время и сделали каку. Потратьте еще неделю на чтение книги и Вы сделаете лучше.
Или продолжайте делать каку. И я повторюсь, я тоже делал такую каку и именно поэтому Вам и советую читать.
1
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
02.11.2014, 00:34 17
bus, все мы делаем иногда велосипеды, особенно в начале изучения чего-то нового.
Randen, создаете 2 самые обычные кнопки, помещаете их в контейнер и по клику выбираете, какую именно показывать. Профит.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
02.11.2014, 00:37  [ТС] 18
bus, хотите сказать что для моей задачи с кнопкой, если вы прочитали пост №15, можно сделать другое решение адекватнее?

Добавлено через 1 минуту
TanaTiX, даже если будет 2 кнопки, разве после переключения 2ая кнопка получит событие Over? Что-то не вериться.
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
02.11.2014, 00:39 19
Randen, у вас есть 2 объекта. Это целостные объекты, поэтому их поведение работает так, как задумано. Эти объекты одинаковы по своему функционалу (кнопки). На сцене всегда находится только один из них. Почему после переключения что-то должно сломаться?
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
02.11.2014, 01:00  [ТС] 20
TanaTiX, ну так-то это удобнее. Просто смотрел урок по тому как сделать плеер во флеше, и там была кнопка с 6 состояниями. Вот так и начал делать)

Добавлено через 9 минут
TanaTiX, это уже не по теме, но можно ли создавать пользовательские компоненты? А то во встроенных много лишнего лично для меня.

Добавлено через 9 минут
TanaTiX, если создавать компоненты, то его имя это статическая ссылка, и к нему не добавить свойства.
Можно ли это как-то обойти?
0
02.11.2014, 01:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2014, 01:00
Помогаю со студенческими работами здесь

В каждом из n независимых испытаний событие А происходит с вероятностью p. Найти вероятность того, что событие А произошло
В каждом из n независимых испытаний событие А происходит с вероятностью p. Найти вероятность того,...

Если есть форма и есть событие, а процедуры, его обрабатывающей нет в исходниках, то как это событие обрабатывается?
Друзья! Изучаю синтаксис дельфи. Ну то есть к примеру такой код: procedure...

Класс: Как обработать событие последнего объекта в форме, не создавая в классе объекта промежуточное событие?
Итак! Проблема состоит в следующем! Имеется класс в который входит объект второго класса. В...

Событие при активации textbox. Или событие при изменения фокуса
Здравствуйте. Подскажите можно ли создать свое событие происходящий вовремя активации textbox....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru