Ir para conteúdo

POWERED BY:

Arquivado

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

kazuh

Sortear Sequência De Swf

Recommended Posts

Olá! estou quebrando a cabeça há alguns dias e não consegui! alguém sabe como fazer??

 

Eu tenho 5 SWF's

 

1.swf; 2.swf, 3.swf, 4.swf e 5.swf

 

que são chamados pelo menu.swf

 

Eu gostaria que cada vez que menu.swf fosse carregado, fosse sorteado uma sequência diferente, ex.:

 

2.swf; 5.swf; 3.swf; 4.swf; 1.swf

 

e eles precisam ser executados um após o termino do outro.

 

tem como fazer isso??

 

Obrigado desde já,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olhem como estou fazendo...

 

no menu.swf coloquei 50 frames

no primeiro frame, coloquei este AS:

 

numeros = [a="10", b="20", c="30", d="40", e="50"];randomicos = new Array(1);for (var j = 0; j<randomicos.length; j++) {	var diferente = true;	var valor = Math.floor(Math.random()*numeros.length);	for (var k = 0; k<randomicos.length; k++) {		if (randomicos[k] == numeros[valor]) {			diferente = false;			j--;		}	}	if (diferente) {		randomicos[j] = numeros[valor];	}}gotoAndStop(randomicos);

no FRAME 10 coloquei

loadMovie("1.swf", "target");stop();
no FRAME 20 coloquei

loadMovie("2.swf", "target");stop();
no FRAME 30 coloquei

loadMovie("3.swf", "target");stop();
no FRAME 40 coloquei

loadMovie("4.swf", "target");stop();
e no FRAME 50 coloquei

loadMovie("5.swf", "target");stop();

No final de cada um dos swf's externos (1.swf, 2.swf, 3.swf, 4.swf e 5.swf)

coloquei:

 

numeros = [a="10", b="20", c="30", d="40", e="50"];randomicos = new Array(1);for (var j = 0; j<randomicos.length; j++) {	var diferente = true;	var valor = Math.floor(Math.random()*numeros.length);	for (var k = 0; k<randomicos.length; k++) {		if (randomicos[k] == numeros[valor]) {			diferente = false;			j--;		}	}	if (diferente) {		randomicos[j] = numeros[valor];	}}_root.gotoAndStop(randomicos);
Sendo que tirei da variável numeros o valor do swf corrente.

ex:

 

no SWF 1.swf o é numeros = [b=20", c="30", d="40", e="50];

 

no SWF 2.swf o é numeros = [a=10", c="30", d="40", e="50];

 

e assim por diante!

só que o que acontece...

 

Eu não consigo garantir uma sequência sem repetição...

alguém me ajuda a pensarrrrr... tem solução??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou pensando assim...

se numeros = [a=10", b="20", c="30", d="40", e="50]; ficasse no _root. no menu.swf

 

e cada vez que o swf externo correspondente fosse excutado, o numeros fosse atualizado?

 

exemplo: o 1.swf foi executado, no final da ação, o numeros fosse atualizado pra:

 

numeros = [b=20", c="30", d="40", e="50];

 

o 3.swf executa e atualiza o numeros pra:

 

numeros = [b=20", d="40", e="50];

 

etc...

 

alguém, tem uma luz como se podeeria fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

No menu.swf:

 

ACTIONSCRIPT
//Iniciando variáveis

var n_swfs:Number = 5;

var sorteados:Array = new Array();

 

//Função que irá sortear um novo swf e carregar

function sortearSwf() {

        //Sorteando um novo número enquanto ele for repetido

        do {

                var n:Number = Math.ceil(Math.random() * n_swfs);

        } while (sorteados.possui(n));

       

        //Se forem sorteados todos os números, que recomeçe a contagem

        if (sorteados.push(n) == n_swfs) {

                sorteados.splice(0);

        }

       

        //Carregando o swf sorteado

        loadMovie(n + ".swf", "target");

}

 

//Função que pergunta para a Array se ela possui algum valor

Array.prototype.possui = function(valor) {

        for (var i in this) {

                if (this[i] == valor) {

                        return true;

                }

        }

        return false;

};

 

//Chamando o primeiro swf

sortearSwf();

 

Deixe esse código no frame 1 mesmo. E no final de cada swf carregado apenas coloque:

 

ACTIONSCRIPT
this._parent.sortearSwf();

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta fazer assim

 

 

ACTIONSCRIPT
// essa função sorteia uma sequencia não repetida

 

_root.RamdonUnique = function(quantos, limite) {

   limite = Number(limite);

   quantos = Number(quantos);

   limite = !(Number(limite)) || Number(limite) < Number(quantos) ? quantos : limite;

   if (Number(quantos)) {

       var numero;

       var i;

       var k;

       var matriz = [];

       matriz[0] = Math.floor(Math.random()*limite);

       for (i=1; matriz.length < quantos; i++) {

           numero = Math.floor(Math.random()*limite);

           for (k=0; k < matriz.length; k++) {

               if (numero == matriz[k]) {

                   numero = Math.floor(Math.random()*limite);

                   k = -1;

               }

           }

           matriz[i] = numero;

       }

       return matriz;

   } else {

       return false;

   }

};

 

var numeros = ["1.swf", "2.swf", "3.swf", "4.swf", "5.swf"];

var randomicos = RamdonUnique(5,4);

var i=0

 

_global.carregaProximo=function(){

        loadMovie([numeros[randomicos[i]], "target"]);

        i++

}

_global.carregaProximo()

 

e no final de cada swf você coloca essa linha para chamar a função de carregamento

 

ACTIONSCRIPT
_global.carregaProximo()

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu feras! os scripts funcionaram direitinho, perfeito!

 

Precisava só de uma adaptação:

O sorteio precisaria ser realizada apenas uma vez. ex:

 

carregamos o menu.swf, e foi sorteado a seguinte sequência:

 

1.swf, 3.swf, 5.swf, 4.swf, 2.swf

 

essa sequência seria executada até o menu.swf fosse recarregado novamente (F5)

 

sendo sorteado nova sequência

 

Ai complica??

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eder, deu um erro, veja o Output:

 

**Error** Scene=Scene 1, layer=Layer 6, frame=1:Line 32: Wrong number of parameters; loadMovie requires between 2 and 3.

loadMovie([numeros[randomicos], "target"]);

 

Total ActionScript Errors: 1 Reported Errors: 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eder, em teu script, depois de executada a sequencia sorteada, no final da 5ª animação, ele dá undefined, será q estou montando errado?

 

============================================================

 

Antonio, quando o menu.swf é carregado, ele faz um sorteio e escolhe uma sequência,

 

ex. sorteou : 1.swf, 3.swf, 4.swf, 2.swf, 5.swf

 

no final da execução dessa sequencia, ou seja, depois do 5.swf ele já faz um novo sorteio, e escolhe uma nova sequencia... eu gostaria que fosse executada a mesma sequencia: 1.swf, 3.swf, 4.swf, 2.swf, 5.swf

 

ou seja o sorteio é feita apenas uma vez.

 

o teu script faz isso? será que estou montando errado?

 

obrigado mais um vez pela atenção!! =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ta... não sorteia de novo...

 

ACTIONSCRIPT
//Iniciando variáveis

var n_swfs:Number = 5;

var sorteados:Array = new Array();

 

//Função que pergunta para a Array se ela possui algum valor

Array.prototype.possui = function(valor) {

        for (var i in this) {

                if (this[i] == valor) {

                        return true;

                }

        }

        return false;

};

 

//Criando uma sequência sorteada

var swf_atual:Number = n_swfs;

while (swf_atual--) {

        do {

                var n:Number = Math.ceil(Math.random() * n_swfs);

        } while (sorteados.possui(n));

        sorteados.push(n);

}

 

//Função que irá sortear um novo swf e carregar

function sortearSwf() {

        //Passando para o próximo

        swf_atual == n_swfs - 1 ? swf_atual = 0 : swf_atual++;

        //Carregando o swf sorteado

        loadMovie(sorteados[swf_atual] + ".swf", "target");

}

 

//Chamando o primeiro swf

sortearSwf();

 

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.