Загрузка более одного дочернего образа AS3

Я пытаюсь загрузить 2 изображения в свой файл флэш-памяти, но получаю сообщение об ошибке - новичок в этом обмане AS3, любая помощь будет оценена по достоинству!

Получение ошибки: 5 1151: существует конфликт с запросом определения во внутреннем пространстве имен.

var myImage:String = dynamicContent.Profile[0].propImage.Url;
var myImage2:String = dynamicContent.Profile[0].prop2Image.Url;

var myImageLoader:StudioLoader = new StudioLoader();
var request:URLRequest = new URLRequest(enabler.getUrl(myImage));
myImageLoader.load(request);
myImageLoader.x =17;
myImageLoader.y = 0;

var myImageLoader2:StudioLoader = new StudioLoader();
var request:URLRequest = new URLRequest(enabler.getUrl(myImage2));
myImageLoader.load(request);
myImageLoader.x =17;
myImageLoader.y = 0;

if(this.currentFrame == 1) {
     addChildAt(myImageLoader, 2);
}

if(this.currentFrame == 2) {
     addChildAt(myImageLoader2, 2);
}

person Dave    schedule 20.12.2014    source источник


Ответы (3)


Обычно рекомендуется переместить повторяющийся код в отдельную функцию вместо копирования и вставки:

function loadImage(file:String, x:Number, y:Number):StudioLoader{
    var myImageLoader:StudioLoader = new StudioLoader();
    var request:URLRequest = new URLRequest(file);
    myImageLoader.load(request);
    myImageLoader.x = x;
    myImageLoader.y = y;
    return myImageLoader;
}
addChild(loadImage(enabler.getUrl(myImage1),17,0));
addChild(loadImage(enabler.getUrl(myImage2),17,0));

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

Это может дать некоторое представление:

http://www.adobe.com/devnet/actionscript/learning/as3-fundamentals/functions.html

person Malte Köhrer    schedule 20.12.2014
comment
Вы знаете, как добавить размер изображения? Я использую одно и то же изображение для нескольких баннеров разного размера, при этом оно растягивается на все это... myImageLoader.height = 200; например не работает - person Dave; 16.03.2015
comment
Вам нужно дождаться загрузки изображения, прежде чем вы сможете установить размер. См. stackoverflow.com/questions/3792979/ - person Malte Köhrer; 19.03.2015

Вы не можете создать новую переменную с тем же именем, что и у существующей, в вашем случае я говорю о вашем URLRequest request, поэтому, чтобы избежать ошибок такого типа, вы можете сделать так:

var myImageLoader2:StudioLoader = new StudioLoader();
// assing a new URLRequest to an existing var
request = new URLRequest(enabler.getUrl(myImage2));
// here you want use the myImageLoader2, not myImageLoader
myImageLoader2.load(request);
myImageLoader2.x =17;
myImageLoader2.y = 0;

Or :

var myImageLoader2:StudioLoader = new StudioLoader();
// create a new URLRequest var, so the name should be different
var request2:URLRequest = new URLRequest(enabler.getUrl(myImage2));
// here you want use the myImageLoader2, not myImageLoader
myImageLoader2.load(request2);
myImageLoader2.x =17;
myImageLoader2.y = 0;
person akmozo    schedule 20.12.2014

Кроме того, я заметил во втором блоке, что вы объявляете myImageLoader2, но затем используете исходный myImageLoader для выполнения запроса на загрузку. Таким образом, даже если вы объявите новый URLRequest, вы не загрузите оба изображения.

В решении Akmozo это исправлено.

person Jonathan Howe    schedule 22.12.2014