Scaico 0 Denunciar post Postado Outubro 15, 2009 Fala galera, beleza? Seguinte, meus conhecimento de AS são muiiiito parcos. Meu lance é mais HTML, CSS e JS. Então gostaria de pedir paciência com a minha inexperiência, ok? Se em algum momento forem passar algum código, por favor, já expliquem algo como "coloca isso no primeiro frame" ou algo assim, para eu me situar melhor. Hehehehe Vamos lá: Um cliente pediu uma sequência de 12 banners animados, que foram feitos. Mas o cliente gostaria que os banners fossem aleatórios, mas sem repetição até o fim da sequência dos 12. Ou seja, da primeira vez passa: 3, 6, 7, 1, 4, 2, 12, 10, 11, 8, 9 e 5. Na segunda vez, passaria diferente disso. E por ai vai... Mas nunca passaria o mesmo banner 2 vezes antes de passar os 12 diferentes. Aff... A minha ideia foi a seguinte: Eu colocaria cada banner em um Movie Clip e cada MC em um frame. No primeiro frame, porem, eu faria um script que determina a sequência. Ao final da sequencia determinada, ele voltaria ao frame 1, que criaria uma nova sequência aleatoria, mas sempre terminando no frame 1 (para dar o loop). Deu pra entender? :( Pra mim faz sentido, só não sei como programar isso. Abraços e obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Outubro 15, 2009 Bom você como entende de JS deve saber usar Math.random() que é igualzinho E if else Então crie um verificador se já passou por tal banner ou não... e se passou vai para o proximo... se já tiver passado em todos ele simplesmente zera tudo e faz denovo. 1 ideia para fazer isso ficar mais leve, é ir colocando dentro de uma array... o banner que já foi chamado, ai caso no Math.random saia o mesmo nome de banner você verifica com uma busca em array se já passou aquele banner se já passou... então faz o else e muda o numero do random... assim vai ;) Ou seja seria apenas uma função que fica se chamando eternamente... depois que foi chamada 1 vez... mudando os valores... e zerando as variaveis quando necessário. Da uma estudada nisso ai que eu disse que acredito que você consegue fazer... pois AS = JS só que com algumas diferenças... mas a base é a mesma. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Scaico 0 Denunciar post Postado Outubro 15, 2009 Bom você como entende de JS deve saber usar Math.random() que é igualzinho E if else Então crie um verificador se já passou por tal banner ou não... e se passou vai para o proximo... se já tiver passado em todos ele simplesmente zera tudo e faz denovo. 1 ideia para fazer isso ficar mais leve, é ir colocando dentro de uma array... o banner que já foi chamado, ai caso no Math.random saia o mesmo nome de banner você verifica com uma busca em array se já passou aquele banner se já passou... então faz o else e muda o numero do random... assim vai ;) Ou seja seria apenas uma função que fica se chamando eternamente... depois que foi chamada 1 vez... mudando os valores... e zerando as variaveis quando necessário. Da uma estudada nisso ai que eu disse que acredito que você consegue fazer... pois AS = JS só que com algumas diferenças... mas a base é a mesma. Abraços Oi berseck, valeu pela resposta. Meus conhecimentos em JS não são exatamente primorosos também. É mais para utilização de efeitos para front-end. Animação de menus, getElementById e afins... Obviamente não espero códigos prontos. CLARO que se alguem quiser postar a solução completa eu não vou achar ruim. Hahaha. Mas sei que ninguém tem essa obrigação. Mas se você puder ser somente um poquiiinho mais didatico, ficarei grato. Se não atrapalhar, obvio. Pq eu não faço ideia de como criar verificador ou usar array. Hahaha Compartilhar este post Link para o post Compartilhar em outros sites
Scaico 0 Denunciar post Postado Outubro 15, 2009 Acabei achando o tópico do Thelon, que ajuda BASTANTE na resolução do problema: http://forum.imasters.com.br/index.php?/topic/296315-banners-randomicos/ Nele, temos o seguinte código: //Cria as matrizes var swfs:Array = new Array(); cores[0] = "banner1"; cores[1] = "banner2"; cores[2] = "banner3"; cores[3] = "banner4"; /*Evita que um banner seja repetido em seguida No caso ele chama uma função que tem nome de "randomiza" Antes de tudo, tem uma variavel que se chama lastRandom = -1; ela seria o último número randomizado. Na função, ele faz o primeiro random.. dae ele faz um loop while, que diz "enquanto o número random for igual ao último número randomizado, tenta randomizar de novo..." */ lastRandom = -1; function randomiza(numMax) { numRandom = random(numMax); while (lastRandom == numRandom) { numRandom = random(numMax); } lastRandom = numRandom; return numRandom; } //Função que cria o random. function MostraSwf() { i = randomiza(4); trace(i); if (i == 0) { loadMovie("banner1.swf", "recebeswf"); } else if (i == 1) { loadMovie("banner2.swf", "recebeswf"); } else if (i == 2) { loadMovie("banner3.swf", "recebeswf"); } else if (i == 3) { loadMovie("banner4.swf", "recebeswf"); } } MostraSwf(); stop(); Funciona muy bien, só que ele só evita repetições seguidas, e não em um espaço de X banners. Seria possivel mudar isso para que não repetisse NENHUM banner até 12 exibicoes? Ou estou pedindo demais? ;) Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Outubro 15, 2009 Pedindo demais você estava... Mas resolvi ajudar... Poem meus creditos no código se puder ;P /* * * Codigo criado por Thiago de Oliveira Cruz * Código para fazer banners randomicos, sem repetição até terminar de passar todos * */ //Crio uma array com todos os meus banners //Lembrando que aqui posso criar um XML para popular esse valor ou um LoadVars var array:Array = new Array('banner1.swf','banner2.swf','banner3.swf'); //Cria a string vazia que vai receber os banner que forem passando var old:String = new String(); //Crio um contador var count:Number = 0; //Crio o alvo que vai carregar os clips var alvo:MovieClip = this.createEmptyMovieClip('alvo', 0); //Crio minha função que vai fica loopando os swf's function init(){ var i = Math.round(Math.random()*2); var str:String = array[i].toString(); //Crio o if que busca se o valor já passou pela nova array if(old.indexOf(str) >= 0) { //verifico se meu contador = valor total da array menos 1 pq a contagem de array é do 0 e não 1 if(count >= array.length){ //zero a string de banners old = ""; //zero meu contador count = 0; //re inicio minha função init(); } else { //somo + 1 ao meu contador caso ele não passe pelo resultado acima. count++; init(); } }else{ //Somo o nome do baner a minha string de controle old += str+","; //Carrego os banners loadMovie(array[i], alvo); } } //Verificador do frame do banner, se atingir o maximo ele para e passa para o proximo this.onEnterFrame = function(){ if(alvo._currentframe == alvo._totalframes){ init(); } }; //Inicio toda a função init(); Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Scaico 0 Denunciar post Postado Outubro 15, 2009 Sem dúvida será creditado, Thiago. Muito grato pela ajuda. Um comentário: Fiz o teste com 3 dos 12 banners apenas: Basquete (B), Corrida ©, e Dança (D). O resultado foi o seguinte: B, D, C D, C, B C, D, C, B C, D, B C, C, D, C, B Por algum motivo, o banner de Corrida repete, casualmente. Ele é o segundo do array. Quando coloquei mais 3 banners (Artesanato, Futebol e Ginástica), primeiro tive que mudar a linha var i = Math.round(Math.random()*2); Supus que seria *5... Funcionou bem, as repetições diminuiram bastante. Mas era sempre o banner da Corrida. Troquei ele de posição com o do Basquete no Array e o do Basquete passou a repetir. Ou seja, repetia a segunda posição do Array. MUITO, mas MUITO raramente. Eu suponho que com 12 banners, isso será irrelevante. :) A única coisa que te pergunto é: Que número devo colocar no Math.random()*_ para 12 banners? Eu chutei 5 no outro, mas vai ver é um dos motivos para ter rolado repetição. Alias, eu também chutei que era lá que eu devia mudar algo :P Abraços e muitíssimo obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Outubro 15, 2009 Math.random = randomiza o numero que você colocar que vai de de 0 a 1 milhão com casas depois da virgula O math.round faz com que arredonde o numero. Agora eu mudei uma coisinha ali no código... da um copy paste denovo nele que deve arrumar esse problema E para 12 é sempre o numero total -1 que você vai usar... pois existe o 0 em uma array... e ai de 0 a 11 = 12 ;) Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Scaico 0 Denunciar post Postado Outubro 15, 2009 Math.random = randomiza o numero que você colocar que vai de de 0 a 1 milhão com casas depois da virgula O math.round faz com que arredonde o numero. Agora eu mudei uma coisinha ali no código... da um copy paste denovo nele que deve arrumar esse problema E para 12 é sempre o numero total -1 que você vai usar... pois existe o 0 em uma array... e ai de 0 a 11 = 12 ;) Abraços Já atualizei e já fechei pro cliente. Está repetindo ainda, mas a freqüência é tão pequena e aleatória que não tem do que reclamarem. Agora, a título de curiosidade, analisei seis "rodadas" de 12 banners... Todas sem dar refresh. A cada 12 banners, reiniciava a contagem de repetições. Olha o que encontrei: 1ª rodada: Mus, Dan, Bas, Art, Fut, Ten, Gin, Raf, Tea, Cor, Pnt, Vol - 0x 2ª rodada: Raf, Vol, Bas, Dan, Gin, Fut, Art, Mus, Pnt, Tea, Dan, Vol - 2x 3ª rodada: Ten, Mus, Bas, Cor, Fut, Pnt, Tea, Gin, Raf, Mus, Fut, Tea - 3x 4ª rodada: Vol, Gin, Pnt, Dan, Cor, Ten, Bas, Gin, Vol, Mus, Tea, Cor - 3x 5ª rodada: Pnt, Dan, Raf, Fut, Raf, Art, Gin, Mus, Tea, Vol, Bas, Dan - 2x 6ª rodada: Dan, Tea, Mus, Gin, Bas, Vol, Art, Fut, Ten, Cor, Pnt, Raf - 0x 0, 2, 3, 3, 2, 0... Hahaha. Bizzaro, não? Novamente obrigado, e se quiser "Resolver" o tópico, fique a vontade. :D Abraço! Compartilhar este post Link para o post Compartilhar em outros sites