написание встроенной функции as3 и проблемы с доступом к переменным вне функции - PullRequest
0 голосов
/ 22 декабря 2011

Я пишу встроенную функцию в AS3 как обработчик событий для класса Loader, у меня проблема в том, что в этой встроенной функции ей необходим доступ к переменным вне области действия функции.

Вот код, который я запускаю:

for(var i:uint=0;i<numChildren;i++){;
var displayObj:DisplayObject = getChildAt(i);
var displayObjWidth = displayObj.width;

if (elementname == displayObj.name)
{
    var loader:Loader = new Loader();
    var urlRequest:URLRequest = new URLRequest(loadURL);
    loader.load( urlRequest );
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event){
                                              var mw:Number = displayObj.width;
                                              var mh:Number = displayObj.height;
                                              var tempImage:Bitmap = new Bitmap(e.target.content.bitmapData);
                                              image.bitmapData = tempImage.bitmapData;
                                              image.width = mw;
                                              image.height = mh;
                                              loader.width = displayObj.width;
                                              loader.height = displayObj.height;});
    loader.x = displayObj.x;
    loader.y = displayObj.y;
    addChild( loader );
    removeChild( displayObj );
}

Эта функция загружает изображение из URL, затем находит соответствующий дочерний элемент и заменяет существующее изображение новым загруженным.

У меня проблема в том, что я могу получить доступ к высоте и ширине исходного экранного объекта, который я заменяю новым, загруженным через класс Loader.

Как я могу получить доступ к этим переменным вне области функции или передать их в функцию?

1 Ответ

3 голосов
/ 22 декабря 2011

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

Во-вторых, вы можете использовать словарьчтобы создать отношения изображения / экранного объекта, которые вам нужны.По сути, когда вы создаете загрузчик, вы сохраняете его в словаре как ключ, а displayObj - как значение.

Что-то подобное должно работать:

private var imageToDisplayObj:Dictionary = new Dictionary();

function loader_complete(e:Event){
    var displayObject:* = imageToDisplayObj[event.currentTarget];
    // Do something with the display object
}); 

for(var i:uint=0;i<numChildren;i++){;
var displayObj:DisplayObject = getChildAt(i);
var displayObjWidth = displayObj.width;

if (elementname == displayObj.name)
{
    var loader:Loader = new Loader();
    var urlRequest:URLRequest = new URLRequest(loadURL);
    loader.load( urlRequest );

    // Map the loader to the display object
    imageToDisplayObj[loader] = displayObj;

    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_complete);
    loader.x = displayObj.x;
    loader.y = displayObj.y;
    addChild( loader );
    removeChild( displayObj );
}
...