Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos. Estou desesperado sem saber oq fazer para arrumar essa minha função de carregar. Ela está carregando um swf em cima de outro. Já tentei o removeChild, unload só que não sei se usei eles certo. Já peguei varios script diferentes de upload e todos resultam no mesmo problema. Falta apenas isto para eu acabar o projeto... Por favor, alguem me ajuda.
function loadPrincipal(load_mc:MovieClip, load_img:String):void {
if (load_mc == mc_conteudo.mc_conteudo_int1){
mc_conteudo.visible = true;
}
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest(load_img));
function progressHandler(event:ProgressEvent):void
{
var ratio:Number = event.bytesLoaded / event.bytesTotal;
mcBar.scaleX = ratio;
}
function completeHandler(event:Event):void{
mcBar.visible = false;
load_mc.addChild(loader);
}
}Está dando o seguinte erro:
RangeError: Error #2006: O índice fornecido está fora dos limites.
at flash.display::DisplayObjectContainer/removeChildAt()
at _1_fla::MainTimeline/loadPrincipal()
at _1_fla::MainTimeline/funcbt_wallpaper()
Para chamar a função de carregar, eu estou usando a seguinte action:
mc_menu.mc_menu_bot.bt_wallpapers.addEventListener(MouseEvent.CLICK,funcbt_wallpaper);
function funcbt_wallpaper(evt:MouseEvent){
mcBar.visible = true;
loadPrincipal(mc_conteudo.mc_conteudo_int1, "3.wallpaper.swf");
}E assim acontece com outros botões também.Coloquei o removeChildAt dentro do if inicial, pois a limpeza deve ser acionada apenas para um mc.
if (load_mc == mc_conteudo.mc_conteudo_int1){
mc_conteudo.visible = true;
load_mc.removeChildAt(0);
}Você verificou se existe algum Child no elemento que você ta procurando?
Pois eu não sei como o flash ta interpretando isso: load_mc == mc_conteudo.mc_conteudo_int1
Ao meu ver o erro ta ai...
Tentou fazer mc_conteudo.mc_conteudo_int1.removeChildAt(0)?
E verificou se tem child com:
mc_conteudo.mc_conteudo_int1.numChildren?
Abraços
Kra, ali no load_mc == mc_conteudo.mc_conteudo_int1 andei colocando um trace, e ele aparentemente funciona certo. Só esteja ocorrendo algum erro q não estou conseguindo ver. Quanto ao mc_conteudo.mc_conteudo_int1.removeChildAt(0), já tentei sim. Fiquei na mesma. Uma coisa muito interessante que você falou foi do mc_conteudo.mc_conteudo_int1.numChildren. Não sei o que é isso... O mc_conteudo_int1 um apenas um mc sem nada dentro. E ele se encontra dentro de outro mc chamado mc_conteudo, todo os dois foram criados manualmente, não por AS3. Unico momento que me refiro a eles com algo de Child é na linha load_mc.addChild(loader);
mc_conteudo.mc_conteudo_int1.addChild(loader)
.
Bom,
Se você fizer:
trace(load_mc.numChildren);
Ele tem que retornar 1 ou mais que 1...
Se ele retornar zero
Então não vai ter como você fazer um removeChildAt(0);
Por isso que você tem que testar se ele é maior que 1...
E colocar dentro de um for normalmente.
Assim evita o caso de não existir conteúdo dentro do MC para apagar
Abraços
É kra, retornou 0, como posso contornar essa situação?
Não sei se ajuda, isso é de um exemplo bem simples.
removeChild(myLoader);
page1_mc.gotoAndPlay(1);
page2_mc.gotoAndPlay(1);
...etc
Faz um loop pelo numChildren e vai removendo todos os conteúdos do load_mc
Exemplo:
Coloquei para ele remover o conteúdo carregado após 2 segundos mas você não precisa fazer isso... basta fazer direto antes de carregar o novo conteúdo.
Abraços