Цитата:
|
Как сделать что бы при появлении инфо окна,оно вылазило на передний план а задний расфокусировывался и стал бездейственным?
|
Самый простой и эффективный способ сделать это - добавить под верхнее окно спрайт с прозрачной заливкой, полностью заполняющий окно флеш плеера. А по удалению информационного окна, соответственно, удалить и этот спрайт.
Одно но, спрайт должен позиционироваться по глобальным координатам, т.е. его точка регистрации должна находиться в том же месте, где 0:0 у стейдж.
Я обычно для подобных систем с придупреждающими окнами создаю специальный менеджер, со статическими методами, который изначально надо один раз инициализировать
Вот самый упрощенный вариант такого менеджера

Код AS3:
package {
import flash.display.Stage;
/**
* ...
* @author Casey Ryan
*/
public class WindowsManager {
private static var stage: Stage;
public static function initialize(stg:Stage):void {
stage = stg;
}
public static function showWarning():void {
if (!stage) throw "класс не инициализирован";
var warningWindow:WarningWindow = new WarningWindow(); // создаем окно и добавляем на стейдж; об остальном позаботится само окно
warningWindow.x = (stage.stageWidth - warningWindow.width) / 2;
warningWindow.y = (stage.stageHeight - warningWindow.height) / 2;
stage.addChild(warningWindow);
}
}
}
import flash.display.Sprite;
import flash.events.Event;
internal class WarningWindow extends Sprite {
private var _veil:Sprite = new Sprite(); // спрайт, который закрывает собой всю сцену
public function WarningWindow() {
graphics.beginFill(0xFFFF00);
graphics.drawRoundRect(0, 0, 300, 170, 10, 10);
graphics.endFill();
addEventListener(Event.ADDED_TO_STAGE, onAdded);
}
private function onAdded(e:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, onAdded);
_veil.graphics.beginFill(0x000000, .1);
_veil.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
_veil.graphics.endFill();
parent.addChildAt(_veil, parent.getChildIndex(this)); // добавляем непосредственно под это окно; используется parent, чтобы вуаль всегда добавлялась именно в тот же контейнер, что и само окно, без передачи дополнительных ссылок на этот контейнер
}
}
Просто и эффективно. При нажитии кнопки в окне, его можно полностью удалить, вместе с вуалью, так как ссылок на него нигде не сохранится, его уничтожит сборщик мусора.
п.с. Обычно я еще в эти окна передаю колбэки, например onClose, onCancel, onConfirm
чтобы не подписывать окно на события, и не привязывать к нему лишние ссылки. При удалении окна, ссылки на колбэки просто зануляются