Ir para conteúdo

POWERED BY:

Arquivado

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

Juan_VALSA

Função com problema

Recommended Posts

Fiz uma função que retrocede os filmes aparentes e quando ele está no ponto inicial ele toca o novo selecionado.

mas não sei porque ele só funciona nos dois últimos

Os traces que coloquei são chamados na hora que eu gostaria, mas não sei resolver isso.

Alguém pode me ajudar a corrigir este erro.

Valeu!!

 

function escolhe(a) {	for (i=1; i<=3; i++) {		if (this["mc"+i] != a) {			b = this["mc"+i];			trace("retorna "+b);			onEnterFrame = function () {				b.prevFrame();								if (b._currentframe == 1) {					a.play();					trace("play "+a);					delete onEnterFrame;				}			};		}	}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao ivés de:

 

b = this["mc"+i];

trace("retorna "+B);

 

coloque:

 

b = eval(this["mc"+i]);

trace(typeof(B));

 

e ve se ele retorna como movieclip

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Carneiro,ele retorna:movieclipmovieclipplay _level0.mc1eu já tinha tentado esse eval... fiquei feliz pq consegui chegar na lógica...mas é uma mer.. quando o trace diz que tá escolhendo o certo e não rola na funçãoSe você puder me orientar, ficarei grato mais uma vez.Abs!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmm, ve se asim funciona:

 

function escolhe(a) {
	for (i=1; i<=3; i++) {
		if (this["mc"+i] != eval(a)) {
			b = eval(this["mc"+i]);
			trace("retorna "+b);
			this["mc"+i].onEnterFrame = function () {
				this.prevFrame();
				
				if (this._currentframe == 1) {
					eval(a).play();
					trace("play "+a);
					delete this.onEnterFrame;
				}
				
			};
		}
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, funcionou parcialmente...já foi irado mesmo assim pois ele está escolhendo os movie e tocando.A única coisa que não aconteceu, é que ele não está esperando o filme voltar para tocar o escolhido, entende?Abs!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ué, no fla que fiz aqui ele espera retornar pra depois avançar o que você escolheu, aqui ta funcionando normal, se quiser posta seu fla ai pra dar uma olhada

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara..eu acho que me enganei...realmente está funcionando!Muito obrigado, ficou irado!!Mas eu queria entender o que se passou, seria possível, você me dizer o que você fez?Esse eval que não consigo entender...Abs!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz...descobri aqui que estava funcionando quando só tinha 2 movies...quando coloquei o 3 ele não faz mais do jeito que eu quero.Acho que ele já vê que tem um dos 3 no frame um e dá o play antes do que está sendo vizualizado voltar....Tenho que fazer um jeito de verificar se os que estão sobrando estão no frame 1...não é isso?abs1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acontece o seguinte, quando você esta colocando por exemplo a = "mc" + i você ta montando uma string, quando você coloca o eval, o flash vai entender que você esta criando um movieclip, mas isso acho que nem era o problema no seu caso, o problema é que você estava alterando o valor de b, pois estava usando:

 

onEnterFrame = function () {
				b.prevFrame(); ....

Então no primeiro loop do for ele é mc2, veja bem que ele ta pedindo pra voltar o b. então na segundo loop do for ele vai dizer que o b. ja não é mais o mc2, passa a ser mc3, então ele volta só o 3, eu fiz o seguinte;

 

b = eval(this["mc"+i]);
trace("retorna "+b);
this["mc"+i].onEnterFrame = function () {
this.prevFrame();

o b ai no caso nem esta fazendo nada, só esta retornando o trace, não usei ele na função, pode deletar as duas linhas que o seu script continua funcionando, eu usei o this como elemento daquele loop então naquele loop ele vai fazer um enterframe e uma função para o ['mc + i], entã o enterframe e a função farão parte desse movieclip, dentro da função eu dei um this, se referindo aquele objeto, e como a função é do movieclip entã oa função acaba sendo só praquele movieclip que é o prevFrame(); no outro loop o mc + i terá outro valor e vou criar a função pra esse outro valor, ao invés de trocar o valor de b como você estava fazendo, então é isso a função é simples, se tiver mais alguma dúvida poste ai novamente.

 

abraço,

 

Carneirinho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, excelente explicação!

Muito obrigado!!!

 

A parte do this no loop ficou clara...mas uma última pergunta...

 

O que está acontecendo aqui comigo é que quando tem mais de 2 mclips ele não está esperando o filme exposto voltar. Acredito que seja pq sempre tem 1 mclip já no frame 1, entende?

Ai eu modifiquei lo if assim:

 

if (mc1._currentframe == 1 && mc2._currentframe == 1 && mc3._currentframe == 1) {			 a.play();			 delete this.onEnterFrame;}

Ele passa a esperar mas quando aperto no btn 3 ele toca o 2... tipo no trace retorna 3 vezes o play...

Sem querer abusar de sua boa vontade, mas já fazendo, você pode me orientar nisso?

 

Mesmo que não possa, a explicação que você me deu sobre o resto do código foi excelente.

Muito obrigado pela atenção!!

 

grande abs!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah entendi o que quer dizer, bom, você pode fazer o seguinte, criar uma varaivel com valor 0 dentro da função escolhe, e e colocar um if na função dizendo que se a variavel é maior que o total do for, ela manda o movieclip executar, dai você coloca no final da função do movieclip o variavel ++; ai quando os 3 voltarem a variavel será igual a 3 no caso, dai vai executar o play(), entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você diz dentro dos movies que estão sendo tocados?tentei colocar o último if assim: if(i==3) play ect..etcmas não rolou, mas a lógica estaria certa,né? abs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem 3 movieclips que é o total do for, se a cada movieclip que retroceder você += 1 numa variavel inciada em zero, no final você da um trace pra ver se ele ta chegando no valor 3, pra primeiro você saber se ta somando direito, quando tiver a certeza que esta ai você joga o if, pro mc reproduzir

Compartilhar este post


Link para o post
Compartilhar em outros sites

ih carneiro...

esse de colocar em outro movie eu não consegui...

 

a vez que mais me aproximei foi assim:

 

if (mc1._currentframe == 1 && mc2._currentframe == 1 && mc3._currentframe == 1) {			 a.play();			 delete this.onEnterFrame;}

Eu ainda não domino plenamente o código... a orientação que você deu eu não consegui executar.

Dá para enganar o filme deixando um espaço vvazio de frames igual ao tamanho da animação...mas não é a mesma coisa.

 

você sabe pq esse código acima pode estar dando zica? pq ele funciona, só quando faço do 2 para o 3 ele dá problemas... mas de qualquer forma sigo tentando aqui.

 

Abs!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu coloquei assim...

Mas ele funciona parcialmente...

nem sei se pode colocar tantos "&&"

mas a lógica estaria certa, né?

 

function escolhe(a) {	for (i=1; i<=3; i++) {		if (this["mc"+i] != eval(a)) {			b = eval(this["mc"+i]);			trace("retorna "+b);			this["mc"+i].onEnterFrame = function () {				this.prevFrame();								if (mc1._currentframe == 1 && mc2._currentframe == 1 && mc3._currentframe == 1) {				a.play();				delete this.onEnterFrame;				}							};		}	}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então carbneiro...o trace diz que está certo...mas por algum motivo ele retorna mas 2 ou 3 plays...é meio louco.Ex:Aperto 1 vez o 1 btnele retorna:mc1 =1mc2 =1mc3 =1play _level0.mc1mc1 =1mc2 =1mc3 =1play _level0.mc1Ai se eu apert o 2 ele faz tudo como deveria....mas logo depois eu aperto o 3 e ele toca o 2 novamente e retorna o seguinte:mc1 =1mc2 =1mc3 =1play _level0.mc3mc1 =1mc2 =1mc3 =1play _level0.mc3mc1 =1mc2 =1mc3 =1play _level0.mc2Veja que isso é o retorno só do btn 3, ele manda tocar o 3 2 vezes e depois sem motivo atropela o com o 2?Entende?Tem alguma idéia do que pode ser?Abs!!!

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.