Ir para conteúdo

POWERED BY:

Arquivado

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

Erik

[Resolvido] menu xml as3 não separa o clique

Recommended Posts

Pessoal, tenho uma dúvida:

 

estou fazendo um menu xml, esse menu vai carregar arquivos txt como conteúdo, mas não estou conseguindo configurar a fução de clique, ele até funciona, mas eu não concigo fazer os botões funcionarem separadamente, todos eles executam a mesma funcção (ultima do loop), o xml tem dois nos, um que é o nome do menu e o apelido que vai ser o nome do txt, ainda não criei o código para carregar esse txt do conteudo, porque preciso fazer cada botao carregar um nó, e não ele todo, vejam o código completo:

 

as:

 

//importando classes
import flash.display.*;
import flash.events.*;
import caurina.transitions.*;
import flash.text.*;

//carregando o xml
var xml:XML;
var lista:XMLList;
var loadIMG:Loader = new Loader();
var loadXML:URLLoader = new URLLoader();
loadXML.addEventListener(Event.COMPLETE, listaXML);
loadXML.load(new URLRequest("menu.php.xml"));
function listaXML(e:Event):void
{
xml = new XML(e.target.data);
//cria um menu
var contMenu:McContainerMenu = new McContainerMenu  ;
this.addChild(contMenu);
contMenu.x = 10;
contMenu.y = 70;
var menu:Array = new Array();
for (var i:int = 0; i < xml.meumenu.length(); i++)
{
	//cria e posiciona o menu, efeito e texto
	//variáveis
	var menuIten:McItemMenu = new McItemMenu();
	var menuEfeito:McEfeitoMenu = new McEfeitoMenu();

	//configura
	menuIten.buttonMode = true;
	menuIten.id = i;
	menuIten.textoMenu.text = xml.meumenu.titulo[i].toString();
	menuIten.textoMenu.mouseEnabled = false;

	//adiciona ao palco
	contMenu.addChild(menuEfeito);
	contMenu.addChild(menuIten);
	//menuIten.addChild(textoMenu);

	//animação inicial
	Tweener.addTween(menuIten, {y:i*24, time:3, delay:0, transition:"easeInOutBack"});
	Tweener.addTween(menuEfeito, {y:i*24, time:3, delay:0, transition:"easeInOutBack"});

	//interatividade do menu
	menu.push(menuIten);
	menuIten.addEventListener(MouseEvent.MOUSE_OVER, sobreMenu);
	menuIten.addEventListener(MouseEvent.MOUSE_OUT, foraMenu);
	menuIten.addEventListener(MouseEvent.CLICK, clicaMenu);
	function sobreMenu(e:MouseEvent):void
	{
		var menu = e.target as MovieClip;
		Tweener.addTween(menu, {x:10, width:80, time:1, delay:0, transition:"easeOutBack"});
		menuIten.gotoAndPlay(2);
	}
	function foraMenu(e:MouseEvent):void
	{
		var menu = e.target as MovieClip;
		Tweener.addTween(menu, {x:0, width:90, time:1, delay:0, transition:"easeOutBack"});
	}

	//navegação
	function clicaMenu(e:MouseEvent):void
	{
		trace (menuIten.id);
	}
}
//carrega rodape
var TXT_rodape:URLLoader = new URLLoader();// Variável para ler o arquivo
TXT_rodape.dataFormat = URLLoaderDataFormat.VARIABLES;// Para ler cada variável separadamente
TXT_rodape.load(new URLRequest("paginas/config.txt"));
// Caminho do arquivo;
TXT_rodape.addEventListener(Event.COMPLETE, aoLerTXT_rodape);
// Adiciona um evento a lista;

// Cria a função após ter carregado o arquivo mostra nos campos de texto
function aoLerTXT_rodape(evt:Event):void
{
	rodape.text = evt.target.data.nomedosite + " - todos os direitos reservados";
}
}

 

xml:

 

<site>
 <meumenu>
   <apelido>contato</apelido>
   <titulo>Contato</titulo>
 </meumenu>
 <meumenu>
   <apelido>templates</apelido>
   <titulo>Templates</titulo>
 </meumenu>
 <meumenu>
   <apelido>historia-do-joomla</apelido>
   <titulo>Joomla</titulo>
 </meumenu>
 <meumenu>
   <apelido>textos</apelido>
   <titulo>Textos</titulo>
 </meumenu>
 <meumenu>
   <apelido>a-destaque-studio</apelido>
   <titulo>A Destaque</titulo>
 </meumenu>
 <meumenu>
   <apelido>home</apelido>
   <titulo>Home</titulo>
 </meumenu>
</site>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na função que você cirou, ela recebe um evento que é o clique do mouse, ela está assim:

 

function clicaMenu(e:MouseEvent):void
               {
                       trace (menuIten.id);
               }

 

Sendo que você precisa usar o "e" para achar o botão que foi clicado, pois menuIten é só o nome que está dando a todos os objetos quando está criando com o loop, então use assim:

 

function clicaMenu(e:MouseEvent):void
               {
                       trace (e.target.id);
               }

 

Com esse target, ele vai pegar o id do item que foi clicado, porem dentro do seu objeto, você tem um campo de texto, e se for clicado em cima do campo de texto, ele vai retornar algo errado pois seu campo de texto não tem o id, dai pra corrigir isso, ou você usa menuIten.textoMenu.mouseChildren = false; quando está inserindo o objeto no palco, ou na função clicaMenu você coloca e.currentTarget.id

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, neste projeto tenho boas e más notícias, primeiro: em uma das grandes coincidencias neste universo, no exato momento em que teclei control+s meu pc reiniciou, resultado: arquivo danificado, precisei fazer tudo de novo, mas com código do zero, ficou legalzin e ta funcionando, tenho um site com menu atualizado por xml e o conteúdo por arquivos txt, agora estou ralando em cima do php.

 

O código do clique fiz assim:

function clicaMenu(e:MouseEvent):void
	{
		//array que guarda os itens de menu:
		var menu = e.target as MovieClip;
		//variável que guarda o "apelido" que será usado para abrir o txt
		var mudamenu:String = xml.meumenu.apelido[menu.id].toString();
		//função que carrega o txt
		var TXT_pagina:URLLoader = new URLLoader();// Variável para ler o arquivo
		TXT_pagina.dataFormat = URLLoaderDataFormat.VARIABLES;// Para ler cada variável separadamente
		//aqui vai a o caminho até o txt com a variável mudamenu
		TXT_pagina.load(new URLRequest("templates/flash01/paginas/"+ mudamenu +".txt"));
		TXT_pagina.addEventListener(Event.COMPLETE, aoLerTXT_pagina);
		}

 

Foi sofrimento, mas eu consegui, depois de perder o arquivo e quase desistir do projeto, fui a luta e fiz tudo de novo, e melhor.

 

Ae Moderado, pode por Resolvido, Valew carneirinho, sua dica me deu uma luz pra chegar até aqui!

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.