Actionscript міняємо місцями візуальні об'єкти, edapskov

ActionScript: міняємо місцями візуальні об'єкти

При написанні коду ActionScript часто виникає потреба поміняти місцями два дочірніх візуальних об'єкта всередині об'єкта-контейнера. Як правило, потрібно висунути певний об'єкт на «передній план», щоб його не перекривали інші об'єкти- «сусіди». Як згаданих раніше візуальних об'єктів, в більшості випадків, виступають MovieClip (в ActionScript 2.0) і / або Sprite (в ActionScript 3.0). І саме на прикладі мувікліп і спрайтів далі буде розглянуто рішення проблеми з переміщенням візуального об'єкта на передній план.

Отже, припустимо у нас є два мувікліпа (для більшої наочності це будуть перекривають один одного прямокутники червоного і чорного кольорів). І ми хочемо, щоб при натисканні мишки MovieClip переміщався б на передній план. В ActionScript 2.0 для цього можна скористатися методом swapDepths () (який динамічно змінює «глибину» розташування мувікліпа) і методом getNextHighestDepth () (повертає номер найвищої вільної глибини).

Код ActionScript 2.0:

/ * Створюємо 1-й мувікліп (червоний прямокутник) * / var mc_1: MovieClip = _root.createEmptyMovieClip ( "mc_1", _ root.getNextHighestDepth ()); mc_1.beginFill (0xff0000,100); mc_1.moveTo (0,0); mc_1.lineTo (350,0); mc_1.lineTo (350,200); mc_1.lineTo (0,200); mc_1.lineTo (0,0); mc_1.endFill (); mc_1._x = 50; mc_1._y = 50; / * Створюємо 2-й мувікліп (чорний прямокутник) * / var mc_2: MovieClip = _root.createEmptyMovieClip ( "mc_2", _ root.getNextHighestDepth ()); mc_2.beginFill (0x000000,100); mc_2.moveTo (0,0); mc_2.lineTo (350,0); mc_2.lineTo (350,200); mc_2.lineTo (0,200); mc_2.lineTo (0,0); mc_2.endFill (); mc_2._x = 150; mc_2._y = 150; / * Клік по мувікліп буде запускати функцію foreground * / mc_1.onPress = foreground; mc_2.onPress = foreground; / * Функція, яка змінює мувік місцями * / function foreground ()

Якщо вас бентежить використання _parent в наведеному вище коді, то відсилаю вас до посту «Властивість parent у екранних об'єктів в ActionScript».

До речі, цей спосіб буде працювати і для MovieClip-ів, створених вручну в Adobe / Macromedia Flash.

В ActionScript 3.0 для зміни глибини вкладення MovieClip-ів і Sprite-ів можна використовувати ще більш великий арсенал методів і властивостей. Але розглянемо тільки приклад із застосуванням методу setChildIndex () (дозволяє динамічно змінювати глибину вкладення) і властивості numChildren (повертає кількість об'єктів-«дітей» всередині батьківського об'єкта).

Код ActionScript 3.0:

/ * Імпорт класів * / import flash.display.Sprite; import flash.events.MouseEvent; / * Створюємо 1-й спрайт (червоний прямокутник) * / var sprite_1: Sprite = new Sprite (); sprite_1.graphics.beginFill (0xff0000,100); sprite_1.graphics.drawRect (0,0,350,200); sprite_1.graphics.endFill (); this.addChild (sprite_1); sprite_1.x = 50; sprite_1.y = 50; / * Створюємо 2-й спрайт (чорний прямокутник) * / var sprite_2: Sprite = new Sprite (); sprite_2.graphics.beginFill (0x000000,100); sprite_2.graphics.drawRect (0,0,350,200); sprite_2.graphics.endFill (); this.addChild (sprite_2); sprite_2.x = 150; sprite_2.y = 150; / * Клік по спрайт буде запускати функцію foreground * / sprite_1.addEventListener (MouseEvent.CLICK, foreground); sprite_2.addEventListener (MouseEvent.CLICK, foreground); / * Функція, яка змінює спрайт місцями * / function foreground (event: MouseEvent): void

Як бачите, все досить просто. Причому я привів далеко не всі можливі способи вирішення поставленого завдання.