Elektra 102 Denunciar post Postado Novembro 22, 2009 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
Thiago de Oliveira Cruz 21 Denunciar post Postado Novembro 23, 2009 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
Elektra 102 Denunciar post Postado Novembro 23, 2009 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
Elektra 102 Denunciar post Postado Novembro 23, 2009 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
Thiago de Oliveira Cruz 21 Denunciar post Postado Novembro 23, 2009 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
Elektra 102 Denunciar post Postado Novembro 23, 2009 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
Thiago de Oliveira Cruz 21 Denunciar post Postado Novembro 23, 2009 É 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
Elektra 102 Denunciar post Postado Novembro 23, 2009 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
Thiago de Oliveira Cruz 21 Denunciar post Postado Novembro 24, 2009 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
Elektra 102 Denunciar post Postado Novembro 24, 2009 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