Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Elektra

Ativar botão 'Home' no carregamento inicial

Recommended Posts

O code original não possui os botoes_mcs aninhados em um Movie Clip, ativa o item inicial com:

 

bt0.dispatchEvent(new MouseEvent(MouseEvent.CLICK));

 

Adaptei para outro arquivo com layout líquido e preciso do Movie Clip container para o resize.

Fica selecionado ao clicar, anima os demais itens. Bem simples, mas funcionando na boa.

 

 

Tô precisando um help para o botão 'Home'.

 

menu.buttonMode = true;
menu.addEventListener(MouseEvent.CLICK, onMenuClick);
menu.addEventListener(MouseEvent.MOUSE_OVER, onMenuOver);
menu.addEventListener(MouseEvent.MOUSE_OUT, onMenuOut);


var ativo:MovieClip = new MovieClip();

function onMenuClick(e:MouseEvent):void 
{	
navegaSite("swf/" + e.target.name + ".swf");
trace(e.target.name);

if(ativo != e.target)
{
	trace("clique");
	ativo.gotoAndPlay(11);
	ativo = e.target as MovieClip;		
}
}

function onMenuOver(e:MouseEvent):void
{
if(ativo != e.target)
{		
	e.target.gotoAndPlay(2);
}	
}


function onMenuOut(e:MouseEvent):void
{
if(ativo != e.target)
{		
	e.target.gotoAndPlay(11);
}
}

 

 

Abraços :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se entendi direito, o bt0 está dentro do menu e você quer dar um dispatch no botão que corresponde a home e não consegue acessar porque você aplicou o click evento direto no menu, é isso?

 

Você pode fazer a função receber dois parametros, uma que é o evento que recebe o null por padrão e outra que é o movieclip direto, assim você pode acessar a função tanto pelo evento do mouse quanto pela instancia do movieclip, de qualquer forma acho mais fácil usar um array ou vector e fazer a verificação por ele, mesmo porque você terá que desativar o botão que está ativo, veja se é isso: (Não testei)

 

menu.buttonMode = true;
menu.addEventListener(MouseEvent.CLICK, onMenuClick);
menu.addEventListener(MouseEvent.MOUSE_OVER, onMenuOver);
menu.addEventListener(MouseEvent.MOUSE_OUT, onMenuOut);

var ativo:MovieClip = new MovieClip();

onMenuClick(null, menu.bt0)



function onMenuClick(e:MouseEvent = null, mc:DisplayObject = null):void 
{       
	var mc_: MovieClip = (e == null? mc: e.target) as MovieClip

	var nome:String =  mc_.name;


       navegaSite("swf/" +  nome + ".swf");


       if(ativo != mc_)
       {
               trace("clique");
               ativo.gotoAndPlay(11);
               ativo = mc_;          
       }

}

function onMenuOver(e:MouseEvent):void
{
       if(ativo != e.target)
       {               
               e.target.gotoAndPlay(2);
       }       
}


function onMenuOut(e:MouseEvent):void
{
       if(ativo != e.target)
       {               
               e.target.gotoAndPlay(11);
       }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada pela atenção carneirinho.

 

Testei sua sugestão, o botão 'home' ficou desativado (frame 1).

 

Tenho um exemplo simples, com os botões direto no stage, que ativa o item inicial (bt0). Code original do Michel Araújo, adaptações pelo Foxn (quem adicionou o dispatchEvent).

 

Usei o mesmo action para o menu no arquivo atual (aninhado em um Movie Clip), removi apenas 1 linha (repetia a animação ao clicar). Ficou perfeito, só não tô sabendo como carregar com o 'home' ativo (frame 10).

 

Publicado (com o code que postei) >> Clique aqui

 

Esse arquivo faz parte de um curso, tenho ele completo com XML, menu ativo (Array, Export e tal) mas como não domino o action optei por usar algo ao meu alcance. Adicionei alguns recursos próprios e tenho outros melhoramentos a caminho.

 

 

Agradeço se puder dar uma olhada.

 

 

ps: se me permitir, lhe envio o arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se puder disponibilizar fica mais fácil até de entender o que não está acontecendo, provavelmente pode ser até tempo de execussão.

 

 

Muito obrigada, enviado por MP. :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dei uma olhada no seu código e o que fiz realmente está certo. Com a bola de cristal deu pra imaginar como estava montado seu fla, com o menu como pai de todos.

O único motivo de não funcionar seu home é ele muda de cor no onMenuOver e pelo dispatch você não passa por ele, então uma das opções é você adicionar o gotoAndPlay(2) dentro do onMenuClick (caso ainda não esteja no frame desejado) ou fazer um dispatch pro over tb, opção 1:

 

var ativo:MovieClip = new MovieClip();

onMenuClick(null, menu.home);



function onMenuClick(e:MouseEvent = null, mc:DisplayObject = null):void 
{       
       var mc_: MovieClip = (e == null? mc: e.target) as MovieClip

       var nome:String =  mc_.name;

	mc_.currentFrame < 10? mc_.gotoAndPlay(2): mc_.gotoAndStop(10);


       navegaSite("swf/" +  nome + ".swf");


       if(ativo != mc_)
       {
               trace("clique");
               ativo.gotoAndPlay(11);
               ativo = mc_;          
       }

}

 

Opção 2:

 


var ativo:MovieClip = new MovieClip();
menu.home.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OVER));
menu.home.dispatchEvent(new MouseEvent(MouseEvent.CLICK)); //ATIVA BOTÃO INICIAL

function onMenuClick(e:MouseEvent):void 
{	
navegaSite("swf/" + e.target.name + ".swf");
trace(e.target.name);

if(ativo != e.target)
{
	trace("clique");
	ativo.gotoAndPlay(11);
	ativo = e.target as MovieClip;		
}
}

 

Resumo: Modo Elektra e modo Carneirinho funcionam...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mestre, valeu mesmo!!! :worship:

 

 

Eu tinha tentado adicionar esta linha:

 

menu.home.dispatchEvent(new MouseEvent(MouseEvent.CLICK))

 

Naturalmente deu erro, pela falta de outra complementar.

 

 

Vi alguns arquivos com uso do dispatchEvent, como por exemplo, um swf carregado 'remover' a si

mesmo, mas me falta conhecimento para como e quando usar. Eu chego lá.

Improviso com um botão 'X' (fechar) no container com visible = true/false. Funfa lindo.

 

 

Apenas por conta de estudo, se possível.

 

Caso eu crie um único btn_mc e exporte pela Library, adicione o texto por Array (melhor se for por XML) e posicione com um for. O container seria um Movie Clip (ou Sprite) criado pelo action para poder manipular com a TweenMax.

 

É comum instanciar os botões assim (livro - Aprendendo AS3):

 

btn.name = "button" + (i + 1);

 

Mas meu code funciona com os botões tendo o mesmo nome que o swf. Pode me sugerir algo?

Ganhei um sistema multilínguas com XML que futuramente pretendo adicionar a este arquivo (translate de todas as páginas e menu em um único clique na index).

 

 

Agradeço muito pelo auxílio, que você receba sempre multiplicado.

 

 

Abraços :grin: ... tô feliz, ganhei o meu dia (eu ralo)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahahahhhh, tá tudo ok! Botão ativo lindo. :lol:

 

 

A pergunta 'extra' sobre Export e XML ainda não tentei fazer, daí pedir uma sugestão.

Fiquei delirando aqui, sem dúvida que vou encarar.

 

Vejo isso, se necessário (99,9%) crio um novo tópico e posto o code.

 

 

Grande abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fome de conhecimento, repare não. :innocent:

 

Tenho alguns exemplos com XML, vamos ver que bicho dá.

 

... vai se preparando

 

 

:clap: grandes emoções em breve

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.