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

StackOverflow https://stackoverflow.com/questions/43354

  •  09-06-2019
  •  | 
  •  

Вопрос

Как вы ссылаетесь на растровое изображение на сцене во flash, используя actionscript 3?

У меня есть растровое изображение на сцене во flash, и в конце фильма я хотел бы поменять его на следующее в последовательности, прежде чем фильм зациклится.в моей библиотеке у меня есть 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.

Будем признательны за любую помощь.

Редактировать:

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

Это было полезно?

Решение

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

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

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

Другие советы

Это должно быть что-то вроде этого:

imageHolder.removeChild( imageIndex )

или

imageHolder.removeChildByName( imageName )

и после этого

imageHolder.addChild( newImage )

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top