Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Зарегистрировать свой Event для Class`а (http://www.flasher.ru/forum/showthread.php?t=124016)

ERrorMAKros 22.04.2009 15:33

Спасибо, этот момент выяснили, остался такой фрагмент: почему после создания объекта в момент прослушивания события в Listener`е
Код AS3:

function mainaaa(e:Event):void
{var aaaa=main.aaaaaaa();
  trace(aaaa); // не получаем никаких значений!
}

aaaa - не получила никаких данных, хотя в классе оно имеет значение по умолчанию Number=50 или во время генерирования события принимает значение =1112;

GBee 22.04.2009 15:38

аааа локальная переменнаааая, а если вы про ааааааа() - то это функция, которая видимо не существует, так как по описанию вы думаете, что это переменная.

wvxvw 22.04.2009 15:47

Наверное буков "а" мало написали... ;) По-моему более издевательский способ называть переменные сложно придумать... :D
И не бывает так, чтобы трейс числа не выдал никаких значений - это скорее всего значит, что этот трейс никогда не срабатывает.

Gaen 22.04.2009 15:53

Более издевательский способ - называть переменные lll, llll, lllll, ..., llllllllllllllllll :)

ERrorMAKros 22.04.2009 16:00

Ну хорошо, ...поплнили интернет офтопиком :) ...замечание на тему "имена переменных" - принимаю во внимание, с уважением ;)
Если вы обратите внимние на класс, то увидите там:
Код AS3:

public function aaaaaaa():Number
{
        return mainzx;
}

при вызове в событии:
Код AS3:

var aaaa=main.aaaaaaa();

компилятор не ругается на что то сверх естественное.
Если я вызываю свойства aaaa вне обработчика события, то имею необходимое значение переменной, ...почему он не выводиться в обработчике события?

wvxvw 22.04.2009 16:36

@ GAIKER :
Так нельзя, пайп (|) - это оператор, нельзя его использовать в имени переменной. Но, например, вот такое имя переменной - _______ (7 подчерков) - вполне может быть :)
ПС.... или это I (ай прописная?)

@ ERrorMAKros :
Чудес не бывает, если в вы трейсите число, трейс не может не показать ничего... просто это значит, что при выполнении вашего кода эта функция никогда не вызывается.

Gaen 22.04.2009 17:54

wvxvw, это буква L :)

ERrorMAKros 23.04.2009 02:44

Вложений: 1
Может кто то поковыряет файл?

wvxvw 23.04.2009 03:14

Код AS3:

package
{
        import flash.events.Event;
        import flash.display.Sprite;
 
        public class IEventDispatcherExample extends Sprite
        {
                private var someVariable:Number = 50;
                private var decorDispatcher:DecoratedDispatcher = new DecoratedDispatcher();
 
                public function IEventDispatcherExample()
                {
                        super();
                        decorDispatcher.addEventListener("doSomething", didSomething);
                }
 
                public function someEvent():void
                {
                        decorDispatcher.dispatchEvent(new Event("doSomething"));
                }
 
                public function didSomething(evt:Event):void
                {
                        someVariable = 1112;
                        trace("OK");
                }
 
                public function nextFunction():Number
                {
                        return someVariable;
                }
        }
}
 
import flash.events.IEventDispatcher;
import flash.events.EventDispatcher;
import flash.events.Event;
 
class DecoratedDispatcher implements IEventDispatcher
{     
        private var _dispatcher:EventDispatcher;
 
        public function DecoratedDispatcher()
        {
                super();
                _dispatcher = new EventDispatcher(this);
        }
 
        public function addEventListener(type:String, listener:Function,
                                                useCapture:Boolean = false, priority:int = 0,
                                                useWeakReference:Boolean = false):void
        {
                _dispatcher.addEventListener(type, listener, useCapture, priority);
        }
 
        public function dispatchEvent(evt:Event):Boolean
        {
                return _dispatcher.dispatchEvent(evt);
        }
 
        public function hasEventListener(type:String):Boolean
        {
                return _dispatcher.hasEventListener(type);
        }
 
        public function removeEventListener(type:String, listener:Function,
                                                                        useCapture:Boolean = false):void
        {
                _dispatcher.removeEventListener(type, listener, useCapture);
        }
 
        public function willTrigger(type:String):Boolean
        {
                return _dispatcher.willTrigger(type);
        }
}

Код AS3:

import flash.events.Event;
import flash.display.Sprite;
 
var main:IEventDispatcherExample = new IEventDispatcherExample();
trace("Показываем someVariable до события: " + main.nextFunction());
main.addEventListener('doSomething', event_control);
main.someEvent();
 
function event_control(e:Event):void
{
    trace("----------");      // ПОЧЕМУ ВЕСЬ event_control
    trace("Показываем someVariable во время события: " + main.nextFunction());
    trace("----------");      //  НИЧЕГО НЕ ВЫПОЛНЯЕТ?
}
 
trace("Показываем someVariable после события: " + main.nextFunction());
/**
 * Показываем someVariable до события: 50
 * OK
 * Показываем someVariable после события: 1112
 */

Это ожидаемый результат?
(немного имена подрихтовал, но на таймлайне не трогал. + слушателем принято давать имена отражающие то событие, на которое подписывались, т.е. clickHandler, ну, или в худшем случае handleClick или onClick).

ERrorMAKros 23.04.2009 04:25

Нет, я вижу такой ход событий, должен выполняться код в event_control()
Результат в trace должен получиться:
Код AS3:

/**
 * Показываем someVariable до события: 50
 * Показываем someVariable во время события: 1112
 * Показываем someVariable после события: 1112
 */

Показываем someVariable во время события - не выполняется весь код в функции event_control()


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

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