Лучшая практика для событий ActionScript 2 - является там способом моделировать ActionScript события с 3 стилями?

Вы можете использовать функцию array_map с нулем в качестве обратного вызова.

$arr = array_map(
  null,
  $arr[0],
  $arr[1],
  $arr[2]
);

print_r($arr);

//Output

Array
(
[0] => Array
    (
        [0] => one
        [1] => sun
        [2] => jan
    )

[1] => Array
    (
        [0] => two
        [1] => mon
        [2] => feb
    )

[2] => Array
    (
        [0] => three
        [1] => tues
        [2] => march
    )
)
8
задан Iain 2 April 2009 в 10:05
поделиться

3 ответа

Его довольно легкое, чтобы сделать это, на самом деле. Несколько классов должны получить Вас движение. Причем первое Event класс, следующим образом:

class com.rokkan.events.Event
{

    public static var ACTIVATE:String = "activate";
    public static var ADDED:String = "added";
    public static var CANCEL:String = "cancel";
    public static var CHANGE:String = "change";
    public static var CLOSE:String = "close";
    public static var COMPLETE:String = "complete";
    public static var INIT:String = "init";

    // And any other string constants you'd like to use...

    public var target;
    public var type:String;

    function Event( $target, $type:String )
    {
        target = $target;
        type = $type;
    }

    public function toString():String
    {
        return "[Event target=" + target + " type=" + type + "]";
    }
}

Затем я использую два других базовых класса. Один для регулярных объектов и на для объектов, которые должны расшириться MovieClip. Сначала нет MovieClip версия...

import com.rokkan.events.Event;
import mx.events.EventDispatcher;

class com.rokkan.events.Dispatcher
{

    function Dispatcher()
    {
        EventDispatcher.initialize( this );
    }

    private function dispatchEvent( $event:Event ):Void { }
    public function addEventListener( $eventType:String, $handler:Function ):Void { }
    public function removeEventListener( $eventType:String, $handler:Function ):Void { }
}

Затем MovieClip версия...

import com.rokkan.events.Event;
import mx.events.EventDispatcher;

class com.rokkan.events.DispatcherMC extends MovieClip
{

    function DispatcherMC()
    {
        EventDispatcher.initialize( this );
    }

    private function dispatchEvent( $event:Event ):Void { }
    public function addEventListener( $eventType:String, $handler:Function ):Void { }
    public function removeEventListener( $eventType:String, $handler:Function ):Void { }
}

Просто расширьте свои объекты или с помощью Диспетчера или с помощью DispatcherMC, и Вы сможете диспетчеризировать события и прислушаться к событиям так же к AS3. Существует всего несколько причуд. Например, когда Вы звоните dispatchEvent() необходимо передать в ссылке на объект, диспетчеризирующий событие, обычно только путем обращения к объекту this свойство.

import com.rokkan.events.Dispatcher;
import com.rokkan.events.Event;

class ExampleDispatcher extends Dispatcher
{
    function ExampleDispatcher()
    {

    }

    // Call this function somewhere other than within the constructor.
    private function notifyInit():void
    {
            dispatchEvent( new Event( this, Event.INIT ) );
    }
}

Другая причуда - когда Вы хотите прислушаться к тому событию. В AS2 необходимо использовать Delegate.create() получить корректный объем функции обработки событий. Например:

import com.rokkan.events.Event;
import mx.utils.Delegate;

class ExampleListener
{
    private var dispatcher:ExampleDispatcher;

    function ExampleDispatcher()
    {
        dispatcher = new ExampleDispatcher();
        dispatcher.addEventListener( Event.INIT, Delegate.create( this, onInit );
    }

    private function onInit( event:Event ):void
    {
        // Do stuff!
    }
}

Надо надеяться, я скопировал и вставил все это правильно из моих старых файлов! Надежда это удается для Вас.

9
ответ дан 5 December 2019 в 15:26
поделиться

Я предположил бы, что лучшая практика должна будет использовать класс EventDispatcher, где когда-либо возможно. Можно читать об этом здесь: http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00002325.html

Компоненты UI также имеют очень подобную AS3 диспетчеризацию события.

2
ответ дан 5 December 2019 в 15:26
поделиться

Я написал несколько классов для работы с событиями в AS2. Вы можете скачать их здесь.

http://dispatchevent.org/mims/as2-eventdispatcher/

0
ответ дан 5 December 2019 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: