Как вы ссылаетесь на растровое изображение на сцене в ActionScript?

Как ссылаться на растровое изображение на сцене во Flash с помощью ActionScript 3?

У меня есть растровое изображение на сцене во флэш-памяти, и в конце фильма я хотел бы поменять его на следующее в последовательности, прежде чем фильм зациклится. в моей библиотеке у меня есть 3 изображения, экспортированные для ActionScript, с именем класса img1 / img2 / img3. вот как представлены мои слои во Flash.

layer 5 : mask2:MovieClip
layer 4 : img2:Bitmap
layer 3 : mask1:MovieClip
layer 2 : img1:Bitmap
layer 1 : background:Bitmap

в конце фильма я хотел бы поменять местами img1 на img2, чтобы фильм зацикливался без проблем, а затем, в идеале, поменять местами img2 (на слое 4) на img3 и так далее, пока я не дойду до конца своих изображений.

но я не могу понять, как ссылаться на изображения, которые уже были помещены на сцену (во время разработки), кто-нибудь знает, как это сделать?

Мы надеемся, что финальный фильм будет загружать изображения динамически с веб-сервера (у меня есть код для этого бита) и отображать их вместе с img1 / img2 / img3.

Любая помощь будет оценена.

РЕДАКТИРОВАТЬ:

@ 81bronco, я попробовал это, но имя экземпляра выделено серым цветом для графики, это позволит мне делать это только с видеоклипами и кнопками. Я наполовину заставил его работать, превратив их в клипсы и очистив изображения в клипе перед добавлением нового (используя что-то попроще, чем то, что vanhornRF предложил), но по какой-то странной причине, когда маска срабатывает на изображениях, которые я очищал, возвращайтесь за маска анимации.


person Re0sless    schedule 04.09.2008    source источник


Ответы (4)


Чтобы ссылаться на что-то на сцене, вам нужно дать экземпляру сцены имя - а не давать символу в библиотеке имя класса.

Щелкните элемент на сцене и посмотрите на панель свойств. Прямо над полями для ввода размеров элемента должно быть текстовое поле. Введите имя там.

Затем в другом месте кода вы можете ссылаться на этот элемент на сцене по его имени экземпляра.

person Raleigh Buckner    schedule 04.09.2008

Должно получиться примерно так:

imageHolder.removeChild( imageIndex )

or

imageHolder.removeChildByName( imageName )

и после этого

imageHolder.addChild( newImage )
person bitbonk    schedule 04.09.2008

Я бы, наверное, сделал что-то подобное в вашем классе документов

for(var i:int=0; i<numChildren; i++){
    trace(getChildAt(i),"This is the child at position "+i);
}

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

Теперь, когда у вас есть дочерние элементы и в каком индексе они на самом деле находятся внутри стадии, вы можете ссылаться на них, вызывая getChildAt (int), вы можете removeChildAt (int), вы можете addChildAt (displayObject, int) и swapChildrenAt (int, int ). Целое число в этих аргументах будет представлять позицию индекса, которая была возвращена вашим оператором трассировки, а displayObject, очевидно, будет просто представлять все, что вы хотите добавить в сцену или родительский DisplayObject.

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

@ 81bronco Следует обязательно называть свои активы на сцене, если вы хотите однозначно ссылаться на них, чтобы избежать путаницы, если в итоге на сцене окажется много элементов

person vanhornRF    schedule 04.09.2008

Привет, Re0sless, когда вы удаляете эти элементы со сцены, к ним прикреплены какие-либо прослушиватели событий, какие-либо таймеры или загрузчики? Любая из этих вещей может привести к тому, что объект останется во флэш-памяти и не удалится должным образом. Также помимо простого удаления элемента, возможно, попробуйте обнулить его? Иногда это помогает очистить ссылки, чтобы его можно было должным образом уничтожить.

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

person vanhornRF    schedule 04.09.2008