Ir para conteúdo

POWERED BY:

Arquivado

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

kel teixeira

Flash+XML

Recommended Posts

Olá pessoal!

 

Estou a umas 3hrs procurando pela rede um script como procuro e nada!

Então, decide pedir um help.

 

Assim, estou criando um site onde gostaria que a 'discografia' fosse dinâmica.

Onde:

 

MovieClipe carrega a Capa

Text carrega o Título

Text carrega Lista de músicas (com link, ou link ao lado informando 'letra' devidamente linkado)

 

E... se possivél cada Álbum pudesse ser acessado por link (botão), através de ID.

 

Pra ter uma ideia deixo o link, onde as images estão direto no palco e o texto carregado por um .txt.

 

http://www.laurapausinionline.com/site/music.swf

 

Na verdade a parte:

MovieClipe carrega a Capa e

Text carrega o Título

Consegui, mas o restante n

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso vai depender de como você organiza o seu XML...

Por exemplo, se for

<musicas>
  <musica link="link aqui" letra="link aqui">Musica 1</musica>
  <musica link="link aqui" letra="link aqui">Musica 2</musica>
</musicas

Você utiliza a mesma lógica que usa para ler o XML agora, mas extrai todos os dados dentro de <musicas>, muito provavelmente pegando os dados relevantes (atributo link, atributo letra e texto) e colocando-os em um objeto, e adicionar esse objeto em uma array (método Array.push()). Após feito isso, você vai ter todo o conteúdo da lista de músicas organizado em uma array por objetos. A partir daí, basta ir adicionando esses dados no seu campo de texto com novas linhas (lembre-se de definir o campo para multilinha!). Para os links, acho que HTML dá, portanto basta definir o campo para aceitar HTML, e então escrever os links como em HTML normalmente: <a href="link">blablaba</a>. Se não der, dá para fazer uma gambiarra criando MovieClips invisíveis que linkam com getURL, mas não acho que seja necessário isso pois acredito que a tag de link HTML funcione no Flash.

 

 

Até!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lista de faixas, então, seria algo como:

 

<musicas>
  <musica letra="link aqui">Musica 1</musica>
  <musica letra="link aqui">Musica 2</musica>
</musicas>

Mas e a capa e título, como intruduzo no codigo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, o legal do XML é que não tem uma maneira 100% correta de organizar seus dados, você organiza eles como quiser. Vou postar aqui um exemplo de como você poderia organizar seu XML:

 

<albums>
  <album>
	<capa>imagem.jpg</capa>
	<titulo>Folk rock</titulo>
	<musicas>
	  <musica link="escute1.mp3" letra="letras1.txt">Folk 1</musica>
	  <musica link="escute2.mp3" letra="letras2.txt">Folk 2</musica>
	</musicas>
  </album>
  <album>
	<capa></capa>
	<titulo></titulo>
	<musicas></musicas>
  </album>
</albums>

No caso seria interessante pensar na segunda entrada nesse arquivo, às vezes você vai encontrar algum dos campos vazios (ou porque não tem imagem para mostrar, ou não tem a lista de músicas disponível, ou alguma outra coisa falta), e seria interessante checar isso e mostrar alguma coisa avisando que não está disponível.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<albums>
  <album>
	<capa>imagem.jpg</capa>
	<titulo>Folk rock</titulo>
	<musicas>
	  <musica link="escute1.mp3" letra="letras1.txt">Folk 1</musica>
	  <musica link="escute2.mp3" letra="letras2.txt">Folk 2</musica>
	</musicas>
  </album>
  <album>
	<capa></capa>
	<titulo></titulo>
	<musicas></musicas>
  </album>
</albums>

Super José!

 

Só uma duvida!

Teria como 'chamar' cada album atraves dos botoes?

Teria que inserir uma ID?

 

qualquer duvida vide o link do site

http://www.laurapausinionline.com/site/music.swf

 

Logo posto o cod do AS2 pra ver se esta tudo ok.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sou iniciante nisso!

 

System.useCodepage = true;
var arquivo:XML = new XML();
arquivo.load("albuns.xml");
arquivo.ignoreWhite = true;
arquivo.onLoad = function() {
	albuns.loadMovie(this.childNodes[0].childNodes[0].attributes.capa);
	albuns.text = this.childNodes[0].childNodes[0].attributes.titulo;
	albuns.text = this.childNodes[0].childNodes[0].attributes.musicas;
	albuns.link = this.childNodes[0].childNodes[0].attributes.letra;
}

E sobre a ID?

Como funcionaria?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para chamar os albums através de botões, carregue todos os dados com XML e crie objetos contendo os dados carregados de cada album. Guarde esses objetos em uma array global.

 

Nota, você vai ter que usar mais loops pra carregar tudo corretamente!

Veja:

 

System.useCodepage = true;
var array_global:Array = new Array();
var arquivo:XML = new XML();
arquivo.load("teste.xml");
arquivo.ignoreWhite = true;
arquivo.onLoad = function() {
	var doc = this.firstChild;
	
	var albuns = doc.childNodes
	for(x in albuns)
	{
		//para cada um dos albums
		var obj:Object = new Object();
		var album = albuns[x].childNodes;
		for(y in album)
		{
			//para cada uma das tags no album
			switch(album[y].nodeName)
			{
				case "capa":
					obj.capa = album[y].firstChild.nodeValue;
					break;
				case "titulo":
					obj.titulo = album[y].firstChild.nodeValue;
					break;
				case "musicas":
					var musicas = album[y].childNodes;
					obj.musicas = new Array();
					for(z in musicas)
					{
						//para cada uma das músicas
						musica = new Object();
						musica.faixa = musicas[z].firstChild.nodeValue;
						musica.link = musicas[z].attributes.link;
						musica.letras = musicas[z].attributes.letra;
						obj.musicas.unshift(musica);
					}
					break;
			}
		}
		_root.array_global.unshift(obj);
	}
}

Esse código vai carregar todo o conteúdo daquele meu arquivo lá para a Array array_global, que conterá uma série de objetos com os dados. Dá uma olhada ae!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caraca, ta fundindo minha cabeça!

 

Assim, criei um MovieClip 'capa', um Dinamic Text 'musicas' e outro 'titulo'.

Coloquei o codigo na timeline, 1º quadro.

Teste em AS2 e AS3.

 

Carrega o XML, mas n mostra :(

 

Sobre os botoes o burro aqui n entendeu nada!

E sobre as faixas, terei que criar uma área de texto pra cada faixa isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, ele não mostra, o código não faz isso, ele apenas organiza os dados.

 

Você carrega ele quando carrega o seu Flash (_root.onLoad parece perfeito para carregar esse XML), e então você vai ter consigo os dados bastando utilizá-los.

 

Os CDs encontram-se na ordem em que você escreveu no arquivo XML, assim como as músicas.

 

Então, você tem uma Array array_global que contém objetos:

Cada objeto representa um dos albuns do seu XML. Cada objeto possui essas propriedades:

capa - o nome de arquivo da imagem de capa, que você vai carregar com loadMovie;

titulo - o nome do album, que você vai aplicar ao campo de texto que recebe o título;

musicas - uma array com todas as músicas. Cada música é representada por um objeto, esse objeto de música contém as seguintes propriedades:

---faixa - o nome da música que você vai escrever no campo de texto;

---link - o link para escutar a música, você pode utilizar a classe Sound para escutar as músicas caso coloque em formato MP3;

---letras - o link para um txt ou algo que lhe convenha para armazenar e mostrar as letras. Você pode, por exemplo, salvar as letras em um txt e carregar no Flash para mostrar no Flash, ou você pode colocar um link para exibir em uma página HTML separada.

 

Basta mostrar esses dados na tela. Mostre apenas de um album por vez, senão vai embolar.

Quanto às músicas, não, você não precisa criar um campo de texto separado para cada uma delas. Crie um e marque HTML e multilinha.

Utilize a propriedade htmlText nesse campo de texto para adicionar as músicas, colocando HTML para os links.

Dê uma nova linha (\n) após cada música que você escrever, assim você vai ter algo que se assemelha à uma lista.

Suponho que você já esteja familiarizado com loops em arrays certo?

 

É isso ae!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw pela ajuda cara.

 

Se não for muito desaforo, pediria a você fazer um exemplo em .fla e .xml e zipar?

Tentei colocar o q você falou na prática, mas n consegui :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa vontade do José Enésio não faltou, basta ver as explicações e até exemplos postados...

Já fez alguma coisa? Seguiu as dicas acima? O que exatamente não está conseguindo?

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, ele não mostra, o código não faz isso, ele apenas organiza os dados.

 

Você carrega ele quando carrega o seu Flash (_root.onLoad parece perfeito para carregar esse XML), e então você vai ter consigo os dados bastando utilizá-los.

 

Os CDs encontram-se na ordem em que você escreveu no arquivo XML, assim como as músicas.

 

Então, você tem uma Array array_global que contém objetos:

Cada objeto representa um dos albuns do seu XML. Cada objeto possui essas propriedades:

capa - o nome de arquivo da imagem de capa, que você vai carregar com loadMovie;

titulo - o nome do album, que você vai aplicar ao campo de texto que recebe o título;

musicas - uma array com todas as músicas. Cada música é representada por um objeto, esse objeto de música contém as seguintes propriedades:

---faixa - o nome da música que você vai escrever no campo de texto;

---link - o link para escutar a música, você pode utilizar a classe Sound para escutar as músicas caso coloque em formato MP3;

---letras - o link para um txt ou algo que lhe convenha para armazenar e mostrar as letras. Você pode, por exemplo, salvar as letras em um txt e carregar no Flash para mostrar no Flash, ou você pode colocar um link para exibir em uma página HTML separada.

 

Basta mostrar esses dados na tela. Mostre apenas de um album por vez, senão vai embolar.

Quanto às músicas, não, você não precisa criar um campo de texto separado para cada uma delas. Crie um e marque HTML e multilinha.

Utilize a propriedade htmlText nesse campo de texto para adicionar as músicas, colocando HTML para os links.

Dê uma nova linha (\n) após cada música que você escrever, assim você vai ter algo que se assemelha à uma lista.

Suponho que você já esteja familiarizado com loops em arrays certo?

 

É isso ae!

Chega a me dar uma agonia, eu leio, faço e n chego a lugar algum.

Duvidas (ainda):

Como crio cada 'array_global'?

Os carrego com botões sendo a action "trace(_global.album);" por exemplo?

 

Espero q surja uma luz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma array global você faz definindo ela no código do Frame.

Crie uma nova camada pra conter só o código (assim, não atrapalha outras seções da animação), clique no primeiro frame, e defina a variável lá. Ela então passa a ficar disponível à partir de _root. Outra maneira de definir uma array global em outras escopos é definir _root.array por exemplo.

 

Você saca como funciona objetos? Você acessa as propriedades dele com objeto.propriedade. É uma maneira de organizar os dados. Então, essa array global à qual me refiro é uma array de objetos. Cada objeto contém dados de um álbum. Basta partir desse princípio para ter acesso à todos os álbuns.

 

Os dados dos álbuns do seu XML já estão todos carregados na array. Para escolher entre eles, basta acessar um dos elementos. array[0] contém um álbum, array[1] contém outro, etc... Basta trocar os dados dos campos de texto e de imagem quando for necessário. array[0].titulo é o título de um álbum, array[1].titulo é o titulo de outro, etc...

 

Sugiro que você utilize números para navegar entre eles. A navegação é permitida entre 0 e array.length - 1. Ou seja, o número tem que ter algum significado na array dos álbuns. No botão próximo, você adiciona esse número em 1, e carregas os dados do álbum contido nessa posição na array. Botão anterior, você subtrai um. Botão primeiro, você muda para 0, e botão último, array.length - 1. Índices de arrays começam em 0, e array.length contém o número de elementos na array, portanto é necessário subtrair um (já que uma array com 6 elementos possui seu último índice 5).

 

É uma questão de entender como funcionam os objetos, e como funciona a idéia do código que eu passei, que você vai ter uma grande flexibilidade para com o que você quiser fazer no seu flash.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw cara mais uma vez!

 

Vou estudar a respeito, é q nunca mexi com arrays, por isso minha dificuldade.

Mas.. vamos lá, estudar e por em prática.

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se estou no caminho...

 

Coloquei a action pra chamar o xml num primeiro quadro.

No 2º coloquei:

xml.onLoad = function(){
obj = xml.firstChild;
_root.nodes = obj.childNodes.length;
_root.count = 1;
_root.capa = []; //Array
musica.faixa = []; // Array
musica.link = []; // Array
musica.letra = []; // Array

_root.capa = _root.capa[0];
musica.faixa = musica.faixa[0];
musica.link = musica.link[0];
musica.letra = musica.letra [0];
}

Onde eu alteraria '[0]' para [1],[2], etc...

To certo?

 

OBS: este código achei pesquisando sobre arrays.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, você está complicando ainda mais o código.

 

Utilize o código que eu postei. Ele já organiza tudo.

 

Tenha uma variável global mostrando_album. Ela começa em 0.

Tenha uma função que troca os dados do palco. Ela aplica a variável mostrando_album como índice na array_global, e então você tem acesso a um álbum. Troque o texto dos campos de texto dinâmicos que você criou no palco. Ex:

TrocaDados()
{
  var album = array_global[mostrando_album];
  titulo.text = album.titulo;
  //........ etc ..........
}
Coloque os seus botões de navegação. Os botões devem mexer apenas em mostrando_album.

Botão anterior diminui em um caso mostrando_album seja maior que 0, botão próximo aumenta em um caso mostrando_album seja menor que array_global.length - 1.

Em ambos os casos, chame a função TrocaDados após modificar o valor de mostrando_album.

 

Estude mais um pouco sobre arrays, entenda como elas funcionam. É essencial saber isso.

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.