Переопределение открытого метода в динамически загруженном классе с AS3 и getDefinitionByName () - PullRequest
1 голос
/ 22 августа 2010

У меня есть два SWF: main.swf и external.swf.main.swf должен получить доступ к некоторым методам в external.swf, поэтому он загружает в себя external.swf и использует getDefinitionByName ("package.Class") для доступа к классу и одному из его методов:

var ExternalClass = getDefinitionByName("package.Class") as Class;
var ClassInstance = new ExternalClass();
var NeededFunction:Function = ClassInstance["NeededFunction"] as Function;
var response:String = NeededFunction(param);

Теперь мне нужно расширить функциональность NeededFunction (это публичный метод) ... Я знаю, что можно переопределить публичные методы, но как бы я поступил с динамически загруженным классом?

Я былдумая, что я мог бы сделать что-то вроде этого, но это не работает:

var ClassInstance["NeededFunction"] = function(param1:uint):String { 
    var newString = "Your number is: "+param1.toString();  //New functionality
    return newString;
}

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

Используя FlashDevelop, это довольно просто исправить.

Щелкните правой кнопкой мыши включенный SWC из списка проектов. Выберите параметры, затем «включить библиотеку (полная библиотека)».

.. теперь вы можете использовать getDefinitionByName для получения класса без ссылок из файла swc.

0 голосов
/ 22 августа 2010

Другим способом решения этой проблемы может быть наличие классов в пакете, который доступен обоим SWF-файлам. Просто добавьте корневую папку классов в путь к ActionScript.

Вместо того, чтобы получать класс с помощью getDefinitionByName, вы просто импортируете его. Что касается переопределения, вы можете создать класс, который переопределяет один из классов, или вы можете создать интерфейс.


import com.yourlocation.ExternalClass;

var external:ExternalClass = new ExternalClass();

...