Bom, vejamos. Antes de mais nada é importante que você diga com que versão de ActionScript está lidando. Irei tentar explicar utilizando a sintaxe de ActionScript 2.
O termo correto para o que está se referindo, na verdade, é profundidade. Observe:
MovieClip.createEmptyMovieClip(instanceName, depth);
O comando createEmptyMovieClip cria um MovieClip (MC), instanciado instaceName dentro de um outro MC (aqui mostrado como MovieClip). A parte chave em sua pergunta é o parametro depth. Ele nada mais é do que uma indicação de profundidade do MovieClip. Quando maior o numero mais para frente o MC está. Isto é, um MC que tem depth = 10 sempre estara sobre um MC que tem depth 1.
Existe também uma limitação, dois MC nunca podem ocupar a mesma profundidade.
Basta fazer o teste:
_root.createEmptyMovieClip("a", 10);
a.lineStyle(2,0x000000,100);
a.moveTo(0,0);
a.lineTo(10,10);
Executar este código, mostra uma linha no canto superior esquerdo do filme.
Adicione agora o comando:
_root.createEmptyMovieClip("b", 10);
Veja que o código tenta criar um novo MC na mesma profundidade que o anterior. Neste caso, o MC "a" será excluido, e o "b" tomará sua posição.
O que em geral se costuma fazer quando se cria um novo MC, é utilizar o comando getNextHighestDepth, este comando retorna o primeiro valor de profundidade desocupado. O uso é o seguinte:
_root.createEmptyMovieClip(instanceName, _root.getNextHighestDepth());
Neste caso cria-se um MC nomeado instanceName na primeira profundidade disponível na raiz do filme. Com isso nunca alguma MovieClip será acidentamente "excluído".
Agora, para a duvida de fechar um MC. Ao se criar um MC dessa forma:
_root.createEmptyMovieClip("filme", _root.getNextHighestDepth());
loadMovie("teste.swf", _root.filme);
O filme "teste.swf" passa a ter um nome "filme". Este nome é unico e o identifica.
Suponhamos que na raiz do arquivo "teste.swf", existisse um código:
trace(this)
Se este filme fosse executado isoladamente apareceria:
_level0
Agora se ele fosse carregado pelo código acima, a mensagem seria:
_level0.filme
Um botão fecha poderia então ser feito da seguinte forma:
_root.botao_fecha.onPress = function():Void {
this._parent.unloadMovie();
}
(codigo na raiz de teste.swf, que contem um botao também na raiz nomeado botao_fechar) Isso deve funcionar.
Agora, quando ao rodar.
Voce poderia criar uma variavel de controle, que indicasse se existe um MC aberto ou nao. Poderia funcionar mais ou menos assim:
var aux = new Boolean(true);
abrir.onPress = function():Void {
_root.aux = false;
}
E novamente, no botao fechar do "teste.swf":
_root.botao_fecha.onPress = function():Void {
_root.aux = true;
this._parent.unloadMovie();
}
Bastaria então implementar que o site só rode se aux == true.
Espero que tenha ficado claro.
Obs: na verdade até existe o termo nível, mas em geral é aplicado a um outro tipo de operação, por exemplo o loadMovieNum, mas o uso do loadMovie comum é muito mais simples e eficiente, em geral.
Edição feita por: Saruman, 27/06/2009, 15:43.