Могу ли я создать экземпляр класса из общей библиотеки времени выполнения через интерфейс? - PullRequest
2 голосов
/ 03 декабря 2011

В моей SWF-библиотеке Runtime Shred Library есть класс BackButton, который расширяет MovieClip и взаимодействует с IGameButton:

package com.game.button
{
    import com.interfaces.IGameButton;

    import flash.text.TextField;

    public class BackButton extends MovieClip implements IGameButton
    {
        public var labelTxt:TextField;

        public function BackButton()
        {
            super();
        }

        public function get label():String
        {
            return labelTxt.text;
        }

        public function set label(value:String):void
        {
            labelTxt.text = value;
        }

    }
}

Когда я загружаю RSL в свой основной SWF, выполняя следующие действия:

var backButtonClassName:String = "com.game.button.BackButton";
var BackButtonClass:Class = getDefinitionByName(backButtonClassName) as Class;
var backButton:IGameButton = new BackButtonClass();

Я получаю следующую ошибку во время выполнения:

Ошибка приведения типа: невозможно преобразовать com.game.button :: BackButton @ bb12af1 в com.interfaces.IGameButton.

Что я делаю не так?

1 Ответ

0 голосов
/ 02 марта 2012

Ваш getDefinition вызов должен ссылаться на ApplicationDomain , который должен быть установлен в контексте вашего загрузчика:

public function loadHandler(e:Event) : void {
   var loaderInfo:LoaderInfo = e.target as LoaderInfo;
   var BackButtonClass : Class = loaderInfo.applicationDomain.getDefinition( "com.game.button.BackButton" );
}

var loader : Loader = new Loader();
var context : LoaderContext = new LoaderContext();
context.applicationDomain = ApplicationDomain.currentDomain;
loader.load( new URLRequest("backbutton.swf"), context );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...