С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
ActionScript
Войти
Регистрация
Восстановить пароль
 
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
1

Послать один экземпляр события несколько раз

06.06.2014, 23:43. Просмотров 424. Ответов 12
Метки нет (Все метки)

Возможно диспатчить один инстенс несколько раз изменяя его свойства?
Я некогда этого не делал, но удивился, что решения не нашёл.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2014, 23:43
Ответы с готовыми решениями:

Preloader. Один или несколько?
Добрый день. Помогите разобраться в ситуации. Делаю сайт. Есть главная swf с...

Кнопка работает только один раз?
Поставил на форму фигуру (прямоугольник) и в параметрах указал что это Button....

Несколько fla файлов в один проект
Задача такая есть несколько fla роликов которые являются частями одного...

Можно ли в ENTER_FRAME запустить функцию один раз?
Например, мне нужно, чтобы при столкновении объектов (круга и квадрата),...

Анимация кнопки один раз при наведении мыши
Здравствуйте! Не могу разобраться, как прекратить анимацию элемента кнопки....

12
TanaTiX
Модератор
2796 / 1650 / 168
Регистрация: 19.02.2011
Сообщений: 6,007
Завершенные тесты: 2
07.06.2014, 00:29 2
bus, событие - это такой же объект, как и другие, ничто не мешает менять ему свойства (которые можно менять) и использовать этот объект (уже готовый) при диспатче.
1
alexandrratush
57 / 57 / 15
Регистрация: 06.05.2014
Сообщений: 202
07.06.2014, 00:33 3
bus, вы это имели ввиду?
ActionScript 3
1
2
3
4
5
6
7
8
var event:DataEvent = new DataEvent("ADD_CATEGORY", false, false, "Category1");
dispatchEvent(event);
            
event.data = "Category2";
dispatchEvent(event);
            
event.data = "Category3";
dispatchEvent(event);
1
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
07.06.2014, 01:08  [ТС] 4
Цитата Сообщение от alexandr_ratush Посмотреть сообщение
bus, вы это имели ввиду?
Нет, у Вас разные экземпляры, а мне нужно, что-то типа -
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
package
{
    import flash.display.Sprite;
    import flash.events.Event;
    
    public class TestClass extends Sprite 
    {
        private var _dispatcher:TestEventDispatcher;
        
        public function TestClass() 
        {
            _dispatcher = new TestEventDispatcher();
            _dispatcher.addEventListener(TestEvent.TEST, dispatcher_testHandler);
            
            for (var i:int = 0; i < 10; i++) 
            {
                _dispatcher.update();
            }
        }
        
        private function dispatcher_testHandler(event:TestEvent):void 
        {
            trace(event.type);
        }
    }
}
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package 
{
    import TestEvent;
    import flash.events.EventDispatcher;
    import flash.events.IEventDispatcher;
    
    public class TestEventDispatcher extends EventDispatcher 
    {
        public static const EVENT:TestEvent = new TestEvent(TestEvent.TEST);
        
        public function TestEventDispatcher(target:flash.events.IEventDispatcher=null) 
        {
            super(target);
        }
        
        public function update():void
        {
            var event:TestEvent = TestEventDispatcher.EVENT;
            super.dispatchEvent(event);
        }
    }
}
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
package
{
    import flash.events.Event;
    
    public class TestEvent extends Event 
    {
        public static const TEST:String = "test";
        public function TestEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false) 
        { 
            super(type, bubbles, cancelable);
            
        } 
        
        public override function clone():Event 
        { 
            return TestEventDispatcher.EVENT;
        } 
        
        public override function toString():String 
        { 
            return formatToString("TestEvent", "type", "bubbles", "cancelable", "eventPhase"); 
        }
    }
}
0
alexandrratush
57 / 57 / 15
Регистрация: 06.05.2014
Сообщений: 202
07.06.2014, 01:41 5
Нет, у Вас разные экземпляры, а мне нужно, что-то типа
Хм, вы ошибаетесь. У меня один инстанс Ивента, в котором я меняю свойство и опять отправляю его.
А какое свойство вы хотели менять в вашем ивент-объекте? Ваш класс TestEvent не имеет никакой пользы, так как у него нету уникального свойства, которое бы получали все подписчики.

Добавлено через 10 минут
Немного изменил ваш код, посмотрите может вы это искали?
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
package
{
    import flash.display.Sprite;
    import flash.events.Event;
    
    public class TestClass extends Sprite 
    {
        private var _dispatcher:TestEventDispatcher;
        
        public function TestClass() 
        {
            _dispatcher = new TestEventDispatcher();
            _dispatcher.addEventListener(TestEvent.TEST, dispatcher_testHandler);
            
            for (var i:int = 0; i < 10; i++) 
            {
                _dispatcher.update(i.toString());
            }
        }
        
        private function dispatcher_testHandler(event:TestEvent):void 
        {
            trace(event.data);
        }
    }
}
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package 
{
    import TestEvent;
    import flash.events.EventDispatcher;
    import flash.events.IEventDispatcher;
    
    public class TestEventDispatcher extends EventDispatcher 
    {
        private var _event:TestEvent = new TestEvent(TestEvent.TEST, "");
        
        public function TestEventDispatcher(target:flash.events.IEventDispatcher=null) 
        {
            super(target);
        }
        
        public function update(value:String):void
        {
           _event.data = value;
            super.dispatchEvent(_event);
        }
    }
}
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
package  {
    import flash.events.Event;
    
    public class TestEvent extends Event {
        
        public static const TEST:String = "test";
        
        private var _data:String;
        
        public function TestEvent(type:String, data:String, bubbles:Boolean=false, cancelable:Boolean=false) { 
            super(type, bubbles, cancelable);
            _data = data;
        } 
        
        public override function clone():Event { 
            return new TestEvent(type, data, bubbles, cancelable);
        } 
        
        public override function toString():String { 
            return formatToString("TestEvent", "data", "type", "bubbles", "cancelable", "eventPhase"); 
        }
        
        public function get data():String {
            return _data;
        }
        
        public function set data(value:String):void {
            _data = value;
        }
        
    }
    
}
1
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
07.06.2014, 01:55  [ТС] 6
А какое свойство вы хотели менять в вашем ивент-объекте? Ваш класс TestEvent не имеет никакой пользы
В данном примере свойства нет, но это только пример, демонстрирующий, что событие не отсылается.

Хм, вы ошибаетесь. У меня один инстанс Ивента, в котором я меняю свойство и опять отправляю его.
Это Вам так кажется! Вы создаете клон, проверьте сами.
0
alexandrratush
57 / 57 / 15
Регистрация: 06.05.2014
Сообщений: 202
07.06.2014, 11:14 7
В данном примере свойства нет, но это только пример, демонстрирующий, что событие не отсылается.
Не отправляется, потому что метод clone должен быть такого вида:
ActionScript 3
1
2
3
4
public override function clone():Event 
{ 
    return new TestEvent(type, bubbles, cancelable);
}
А что вы вообще хотите сделать с такой реализацией? Почему мой вариант не подходит? Сколько работаю, ни разу не требовалось использовать похожую схему как у вас.
1
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
07.06.2014, 11:50  [ТС] 8
А что вы вообще хотите сделать с такой реализацией?
Сделать хочу пул, а Ваша реализация не подходит, так-как Вы каждый раз новый объект TestEvent создаете.

Неужели события нельзя пересылать?

Добавлено через 21 минуту
Цитата Сообщение от alexandr_ratush Посмотреть сообщение
Не отправляется, потому что метод clone должен быть такого вида:
И я немного не так выразился, событие отправляется, но только один раз.

Добавлено через 3 минуты
Сначала думал, что плеер сохраняет ссылки на отправленные события, чтобы не допустить пересылки..
Но в таком случаи, он должен каждый кадр эти ссылки занулять, но на деле это не так. Возможно плеер имеет внутренний пул, который и не даёт использовать один и тот же объект на протяжении всей активности плеера?
0
alexandrratush
57 / 57 / 15
Регистрация: 06.05.2014
Сообщений: 202
07.06.2014, 11:59 9
И я немного не так выразился, событие отправляется, но только один раз.
Да, я видел что только один раз.
Если честно, то я в такие дебри еще не лез.
Да, а зачем вам пул событий? Что они слишком часто отправляются?
1
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
07.06.2014, 12:05  [ТС] 10
Цитата Сообщение от alexandr_ratush Посмотреть сообщение
Да, а зачем вам пул событий? Что они слишком часто отправляются?
Вы даже не представляете как...
Получается, что если нет способа переотправки событий, то после создания обсервера можно значительно прибавить производительности... Хотя, на уровне нативных классов, они сотнями за один кадр создаются...
0
TanaTiX
Модератор
2796 / 1650 / 168
Регистрация: 19.02.2011
Сообщений: 6,007
Завершенные тесты: 2
07.06.2014, 23:36 11
Цитата Сообщение от bus Посмотреть сообщение
Вы даже не представляете как...
И что, вызов методом напрямую не решает проблему? Что за задача такая?
1
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
08.06.2014, 00:01  [ТС] 12
Цитата Сообщение от TanaTiX Посмотреть сообщение
Что за задача такая?
Я в свободное время люблю решать абстрактные задачи
И если была задача пул событий, то теперь буду потихоньку проверять, на сколько можно урвать
производительности без них.
0
TanaTiX
Модератор
2796 / 1650 / 168
Регистрация: 19.02.2011
Сообщений: 6,007
Завершенные тесты: 2
08.06.2014, 00:07 13
Хорошо бы тогда сравнить с сигналами и колбэками

Не по теме:

ЗЫ. А если нужны абстрактные задачки, то это не проблема. От написания уроков в т.ч. для этого ресурса и до создания собственных библиотек, посвященных какой-либо проблеме. Тему придумать не сложно.

0
08.06.2014, 00:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 00:07

Вывести числа, которые встречаются в массиве несколько раз / один раз
дан массив состоящий из 100 целых чисел. а)Вывести все числа,которие...

Выполнение события только один раз
Всем привет using System; using System.Collections.Generic; using...

Один обработчик события на несколько кнопок
Привет, такой вопрос, как сделать в unity, к примеру 16 кнопок, и поставить им...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru