PDA

Просмотр полной версии : Интересное поведение после загрузке свф файла с подключённым классом


screamge
15.09.2007, 13:56
Пишем класс:


import flash.display.BitmapData;

class TestClass extends MovieClip {
public function TestClass (){
trace ('class2');
var mc:MovieClip = this.createEmptyMovieClip("mc_1", 1);
var mc:MovieClip = this.createEmptyMovieClip("mc_1", 1);
mc.beginFill(0x00CC00);
mc.lineTo(0, 50);
mc.lineTo(40, 50);
mc.lineTo(40, 0);
mc.lineTo(0, 0);
}
}



В linkage мувиклипа прописываем его, далее компилим. Обзываем полученный свф файл "empty1";

далее видоизменяем класс:

import flash.display.BitmapData;

class TestClass extends MovieClip {
public function TestClass (){
trace ('class2');
var mc:MovieClip = this.createEmptyMovieClip("mc_1", 1);
var mc:MovieClip = this.createEmptyMovieClip("mc_1", 1);
mc.beginFill(0xCC3300);
mc.lineTo(0, 50);
mc.lineTo(40, 50);
mc.lineTo(40, 0);
mc.lineTo(0, 0);
}
}

прописываем его в linkage другого мувиклипа другого документа, компилим. Обзываем "empty2";


Имеем два свф файла, тыкаем на "empty1" получаем прямоугольник одного цвета, тыкаем на "empty2" получаем прямоугольник другого цвета.

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


import mx.utils.Delegate;

var mcloader:MovieClipLoader = new MovieClipLoader ();



this.btn1_mc.onRelease = Delegate.create (this, this.load1);
this.btn2_mc.onRelease = Delegate.create (this, this.load2);

_root.createEmptyMovieClip('content_mc', 1);


function load1 ():Void {
trace ('1');
mcloader.loadClip('empty1.swf', this.content_mc);
}

function load2 ():Void {
trace ('2');
mcloader.loadClip('empty2.swf', this.content_mc);
}


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

Кто-нибудь объясните почему так происходит, не одно моё соображение не подаётся никакой логике.

etc
15.09.2007, 14:09
А fla положить? Сваял три свфки, скрыл внутренности и теперь как хочешь, так и смотри.

screamge
15.09.2007, 14:20
:) Код во флашках ничем не отличаются от приведённого кода, прикол именно в последовательности действий.

etc
15.09.2007, 15:05
Это все очень просто объясняется тем, что идет проверка if (!_global.TestClass)

import mx.utils.Delegate;

var mcloader:MovieClipLoader = new MovieClipLoader ();



this.btn1_mc.onRelease = Delegate.create (this, this.load1);
this.btn2_mc.onRelease = Delegate.create (this, this.load2);

_root.createEmptyMovieClip('content_mc', 1);


function load1 ():Void {
trace ('1');
delete _global.TestClass;
mcloader.loadClip('empty1.swf', this.content_mc);
}

function load2 ():Void {
trace ('2');
delete _global.TestClass;
mcloader.loadClip('empty2.swf', this.content_mc);
}

screamge
15.09.2007, 15:32
Что-то до меня не особо доходит кто осуществляет эту проверку, сама идея этого действия интересна и не понятна. Если не сложно __etc, объясни.

iNils
15.09.2007, 15:38
Открой свой код в asv и включи режим просмотра в AS1.

etc
15.09.2007, 15:51
Это все результат того, что AS2 транслируется в AS1.

screamge
15.09.2007, 16:18
понятно, спасибо.