Jump to content


Photo

Variaveis Retornando Undefined


  • Faça o login para participar
1 reply to this topic

#1 Marcos de Paula Muniz

Marcos de Paula Muniz

    Novato no fórum

  • Usuários
  • 3 posts
  • Sexo:Não informado

Posted 07/12/2009, 08:35

Olá pessoal, estou com um problema no meu action script, eu fiz um arquivo flash para ler o título de noticias de um arquivo xml com a seguinte estrutura:

<?xml version="1.0" encoding="iso-8859-1"?>
<lista>
	<noticia titulo="titulo da noticia 1"/>
	<noticia titulo="titulo da noticia 2"/>
	<noticia titulo="titulo da noticia 3"/>
	<noticia titulo="titulo da noticia 4"/>
</lista>

Criei algumas funções para fazer isso, primeiro eu chamo uma função para ler o xml e armazenar o seu conteúdo em um array, depois eu chamo um setInterval para que a cada 3 segundos o título da notícia seja trocada pelo título da proxima noticia do array.

Eu sei que a leitura do xml está correta, pois testei ela, porém as variáveis que uso para controlar as funções retornam undefined. Inclusive, eu só consigo ler o array dentro da função onLoad do xml, fora dela o array também começa a me retornar undefined.

Eu pesquisei na internet sobre variaveis globais no flash, achei o _global e o _root, mais não consegui fazer funcionar, por favor, alguém me ajude a colocar esse código funcionando, segue abaixo o código do meu flash:

// variavel que recebe o indice do item do array a ser mostrado em seguida
var indice:Number;

// array com titulos das noticias
var tituloDinamico:Array = new Array;

var timer;

function leXml(){
	var arquivo:XML = new XML();
	arquivo.ignoreWhite = true;
	arquivo.onLoad = function(sucess) {
		if (sucess) {
			var nodes = arquivo.firstChild.childNodes;
			for (var i = 0; i<nodes.length; i++) {
				tituloDinamico.push(nodes[i].attributes.titulo);
			}
		}
	}
	arquivo.load("lista.xml");
	indice = 0;
	proximaNoticia(indice);
	timer = setInterval(trocaIndice(), 3000);
}

function proximaNoticia(posicao){
	// atualiza o texto no flash dinamicamente
	meuTexto.text = tituloDinamico[posicao];
}

function trocaIndice(){
	if(indice == (tituloDinamico.length - 1)){
		clearInterval(timer);
		indice = 0;
		proximaNoticia(indice);
	} else{
		indice ++;
		proximaNoticia(indice);
	}
}

leXml(); // inicia a execução

Desde já, obrigado.
Marcos de Paula Muniz
Analista / Desenvolvedor Web

#2 Pedropauloalmeida

Pedropauloalmeida

    Fale ao motorista somente o indispensável

  • Usuários
  • 1376 posts
  • Sexo:Masculino
  • Localidade:Santo André SP

Posted 11/12/2009, 08:45

O problema é que você está executando a função em vez de simplesmente apontá-la no setInteval em:

timer = setInterval(trocaIndice(), 3000);


O correto seria:
timer = setInterval(trocaIndice, 3000);

Sem os "parênteses". Provavelmente você se confundiu com o o Javascript, que se escreve como você escreveu.
Veja se isso resolve. Se não resolver, vou jogar seu código no flash e testar, pra ver se descubro mais alguma coisa.

Abraços.

pp




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq