Ir para conteúdo

POWERED BY:

Arquivado

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

Scaico

[Resolvido] rodar movieclips aleatorios

Recommended Posts

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.