Ir para conteúdo

POWERED BY:

Arquivado

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

Elektra

[Resolvido] Gambiarra no preloader - funfa online - uhuuuuu!

Recommended Posts

Buenas, tenho uma página em swf "principal" com botões animados, onde adicionei um player em XML (com loader interno).

Mas, ao adicionar um preloader básico (barra + porcentagem), no frame 1, deu galho.

Testei com loop interno (30 seg), com player em mp3 externo (1 faixa), e por último com carregamento em XML (7 faixas). Nada funcionou.

 

Em comentário das dificuldades (teste local) com meu instrutor, fui informada que o som é sempre carregado no frame 1, e que conforme o tipo de arquivo, a classe loader pede outras soluções (além do meu alcance, no momento).

 

Tive a idéia (inspiração, nem sei de onde) de alterar a ordem na timeline, ou seja, posicionar o player no frame 1, o preloader no frame 2, e a página principal (que contém o mc do player) no frame 3. Nem alterei a action do preloader --> gotoAndPlay(2); - mesmo assim deu certo.

 

Testei online --> funciona. O player carrega 7 MP3s na íntegra (faixas de CD).

 

Ainda não sei usar Arrays, mas sei que o loader do player "criou" esta condição.

 

A página principal de teste é leve (menu + player), carrega outro swf externo (página home.swf - apenas texto).

Em um dos links do menu (fotos), carrega uma galeria de imagens com swf externo, onde adicionei um preloader na imagem inicial (apenas porcentagem) que funciona perfeitamente. Teste no IE8 e FF.

 

Meu instrutor se "assombrou" da solução que inventei.

Aceito dicas para abandonar a "gambiarra" (POG) e fazer corretamente.

Qual "evento" preciso estar atenta para este tipo de situação?

Peço apenas sugestões para estudo. O que devo observar, conforme o tipo de arquivo, referente a classe Loader?

 

Não domino actiom, daí o interesse para pesquisar sobre o assunto.

 

 

Tenho o arquivo publicado no meu server, se necessário, é só avisar que publico o link.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom eu vivo tentando criar carregador para musica tbm...

Tenho até um loopzinho basico que permite carregar varias musicas... em sequencia... não importando em qual frame o player se encontra...

 

Só no frame do player é que ele carrega as musicas.

 

Só que tbm sofro com isso.

 

O que eu tenho é fazer um loader simultaneo

 

no evento onLoad é possivel carregar os dados getBytesLoaded e getBytesTotal

Ai cria-se uma condição de ao carregar 100% ele sobe 1 no contador e passa para o proxima musica a ser carregada e chama a mesma função de loading.

 

Mas isso é feito com player q tem algum array de sons para ser mudado.

Eu faço dessa maneira... não sei se é a melhor ou não...

 

Pq se forem muitas musicas pode causar uma lentidão no processamento dos dados... então é aconselhavel colocar em uma camada diferente... pois assim vai carregar scripts independentes... e não vai ficar dependendo desse loading para continuar carregando o site.

 

Se alguem tiver uma sugestão... melhor q a minha

Ou souber de algo como a Elektra que funcione...

 

Por favor colabore rs

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada berseck.

 

Ainda bem que eu avisei que era gambiarra.

Tenho adoração por jukebox, tô sempre furungando.

 

Com o player, tudo ok, abre executando, vez ou outra uma leve truncada (BL 1 MB).

No FF tranquilo, mas no IE não está carregando as outras páginas (swf externo) ao clicar nos botões.

Tenho noção que usar Arrays é o mais indicado, não vejo a hora de aprender.

 

Minha dúvida era relativa ao preloader da página, certamente o que uso não seja adequado.

Não importa encontrar solução, uma orientação sobre o que devo ficar atenta, está excelente.

 

Foi o melhor código que encontrei até o momento, se quiser, está a sua disposição.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Corrigindo informação.

Também carregou a página fotos no IE8, mas em horário de pouco fluxo na web, agora são 2:40 aqui em Porto Alegre.

 

Então, a coisa não tá tão ruim.

Tô com um big livrão de AS3 que comprei hoje a tarde.

 

Quem pergunta tem interesse de aprender. Aceito sugestões na boa.

Se realizei a proeza com quase nada, imagine o que vem quando eu dominar o assunto.

Me aguarde, rs

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em AS 2.0

Não tem nenhum tipo de content progress

 

Ou seja não da para fazer o que eu falei.

 

Eu não posso fazer assim:

var arr:Array = new Array('musica1.mp3','musica2.mp3','musica3.mp3','musica4.mp3');
var song:Sound = new Sound();
var init:Number = 0

song.loadSound(arr[init], true);

song.onLoad = loading;

function loading(){
 var bt = this.getBytesTotal();
 var bl = this.getBytesLoaded();
 var loaded = Math.round((bl/bt)*100);
 trace(loaded+"%");
}

Esse tipo de código ai não vai funcionar, pois ele não vai ficar carregando... o onLoad é chamado apenas 1 vez

 

Agora se você fizer algo parecido com:

var arr:Array = new Array('1.mp3','2.mp3','3.mp3','4.mp3');
var song:Sound = new Sound();
var song2:Sound = new Sound();
var init:Number = 0

song.loadSound(arr[init], true);
song.start();

song2.loadSound(arr[init+1], true);
song2.stop();

this.onEnterframe = function(){ 
 var bt = song2.getBytesTotal();
 var bl = song2.getBytesLoaded();
 var loaded = Math.round((bl/bt)*100);
 trace(loaded+"%");
 if(loaded = 100){
	 if(init < (arr.length -1)){
		 init++;
		 song2.loadSound(arr[init], true);
		 song2.stop();
	 }
 }
}

Ai é capaz de carregar várias musicas em sequencia... enquanto tem 1 tocando a outra variavel responsavel pelas musicas vai carregar as demais.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se quiser conferir online: Clique aqui

Apenas uma página de acesso pelo menu > fotos

 

Estou usando este código:

 

var getMusic:URLRequest;
var music:Sound = new Sound();
var soundChannel:SoundChannel;
var currentSound:Sound = music;
var pos:Number;
var currentIndex:Number = 0;
var songPlaying:Boolean = false;
var xml:XML;
var songlist:XMLList;

/*--------Simple preloader----------------------------------------*/

function loadProgress(event:ProgressEvent):void {
    var percentLoaded:Number = event.bytesLoaded/event.bytesTotal;
    percentLoaded = Math.round(percentLoaded * 100);
	if(percentLoaded > 20){
		trace("loading");
	} else{
	}
}

function completeHandler(event):void {
    trace("DONE");
	}
/*-------------------Load in Our XML ------------------------*/

var loader:URLLoader = new URLLoader(); //create a new URLLoader Object 
loader.addEventListener(Event.COMPLETE, whenLoaded); //add an event listener to that object 
loader.load(new URLRequest("songs.xml")); //Requests our xml file that contains our song data

function whenLoaded(e:Event):void //WhenLoaded function(see line 50) runs when line 50 is complete
{
	xml = new XML(e.target.data); 
	songlist = xml.song; //accesses our song tag in our xml file
	getMusic = new URLRequest(songlist[0].url);//get music from songlist
	music.load(getMusic);//load music
	soundChannel = music.play();//plays the music
	songTXT.text = songlist[0].title; //gets song name from xml
	//artistTXT.text = songlist[0].artist; //gets artist name
	//albumTXT.text = songlist[0].album;  //gets album name 
	
	soundChannel.addEventListener(Event.SOUND_COMPLETE, nextSong);//runs the next song function when a song completes
}

/*--------ads some mouse events to our buttons---------------------------------*/

next_btn.addEventListener(MouseEvent.CLICK, nextSong); 
prev_btn.addEventListener(MouseEvent.CLICK, prevSong);
pause_btn.addEventListener(MouseEvent.CLICK,pauseSong);

/*--------Skips Songs----------------------------------------*/
/*-most of below the vars is explained above---------*/

function nextSong(e:Event):void
{
	if (currentIndex < (songlist.length() - 1))
	{
		currentIndex++;
	}
	else
	{
		currentIndex = 0;
	}

	var nextReq:URLRequest = new URLRequest(songlist[currentIndex].url);
	var nextTitle:Sound = new Sound(nextReq);
	soundChannel.stop();
	songTXT.text = songlist[currentIndex].title;
	//artistTXT.text = songlist[currentIndex].artist;
	//albumTXT.text = songlist[currentIndex].album;
	soundChannel = nextTitle.play();
	songPlaying = true;
	currentSound = nextTitle;
	soundChannel.addEventListener(Event.SOUND_COMPLETE, nextSong);
}

/*--------Previous song and acceses the information in the xml File--------------------------*/
/*--------most of below the vars is explained above-------------------------*/

function prevSong(e:Event):void
{
	if (currentIndex > 0)
	{
		currentIndex--;
	}
	else
	{
		currentIndex = songlist.length() - 1;
	}

		
	var nextReq:URLRequest = new URLRequest(songlist[currentIndex].url);
	var prevTitle:Sound = new Sound(nextReq);
	soundChannel.stop();
	songTXT.text = songlist[currentIndex].title;
	//artistTXT.text = songlist[currentIndex].artist;
	//albumTXT.text = songlist[currentIndex].album;
	soundChannel = prevTitle.play();
	songPlaying = true;
	currentSound = prevTitle;
	soundChannel.addEventListener(Event.SOUND_COMPLETE, nextSong);
}

function pauseSong(e:Event):void
{
	pos = soundChannel.position; //pause song at current position
	soundChannel.stop(); //stop sound
	songPlaying = false; // songPlaying is now equal to false
	play_btn.addEventListener(MouseEvent.CLICK,playSong); 
}

function playSong(e:Event):void
{
	if(songPlaying == false) //if songplaying is equal to false run function below
	{
		soundChannel = currentSound.play(pos); //play from current position(used if it was paused)
		soundChannel.addEventListener(Event.SOUND_COMPLETE, nextSong);//run nextSong function if current song is complete
		songPlaying = true; //songPlaying is now true
		play_btn.removeEventListener(MouseEvent.CLICK,playSong);
	}
}

É de um template que baixei.

Certamente pode melhorar, já anotei sua orientação para meus estudos.

 

Muito obrigada, melhor impossível. O resto é por minha conta.

 

De minha parte, resolvido.

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É mas só lembrando que meu código acima foi em AS 2.0 e não AS 3.0...

 

Caso algum perdido não entenda a explicação...

 

E como você pode ver em AS 3.0 da para se chamar um evento de Progress de sound e no AS 2.0 não.

Que por sinal em lugar nenhum é chamado o evento loadProgress apesar de ele existir ai no seu código... mas enfim

 

Se quiser chamar bastaria usar:

var sound:Sound = new Sound();
sound.load(new URLRequest('1.mp3'));

sound.addEventListener(ProgressEvent.PROGRESS, onProgress);

function onProgress(e:ProgressEvent):void{
	trace(e.bytesLoaded);
}

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que compreendi, o "Simple preloader" pode ser removido, e em "Load in our XML" substituído por esta função que possui o "loadProgress".

Apenas o loadProgress dá conta do recado ou preciso também criar Arrays para que a execução não fique truncada?

 

Com o código do player ajustado posso usar um preloader básico na página ou também será preciso alguma alteração?

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pré loaders tem como definição você pré carregar alguma coisa.

Então tudo que é pesado que vai demandar uma espera do usuário, sempre é bom pré carregar.

 

Por exemplo é muito chato você ta ouvindo uma musica e o tempo todo ela ficar picotando... pois ainda não carregou o arquivo inteiro, por isso é bom o pré carregamento de informação antes que você realmente vá usar.

 

Tudo que encurtar o tempo e a vida do usuário é melhor para ele... teoricamente é melhor para você ;)

 

Arrays normalmente são montadas quando se tem muito conteúdo, pois se for carregar 1 coisa só ou 1 info só não preciso de um array para isso basta chamar diretamente o nome, fora que o fato que uma array... pode virar uma matriz e conter varios dados de um unico item... com uma variavel info de tudo que acontece.

 

Então é sempre bom pegar o costume de trabalhar com dados que podem ser re utilizados e acessados mais fácilmente.

Por exemplo eu prefiro colocar todos os MovieClips que eu duplicar dentro de uma array.

Assim eu tenho um controlador que me diz qual arquivo eu to mexendo e a onde. Assim tornando a minha acessibilidade mais fácil... e assim enxutando meu código, pois eu não vou ter que escrever milhões de coisas para chegar no nome do MC quando já tenho 1 array que contem tudo isso.

 

Ai vai de programador para programador, a quem acha melhor fazer como eu... a outros que preferem outros tipos de acesso. Vai do modo de pensar e maneira de costruir seus códigos.

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigada berseck, já tenho um excelente referêncial para meus estudos.

Valeu mesmo.

Sem mais perguntas para este tópico.

 

Abraços.

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.