Ir para conteúdo

POWERED BY:

Arquivado

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

mexicanox

[Resolvido] loop para criar varios movie clip

Recommended Posts

opa !!!!!!!!!!

 

Seguinte pessoal, eu to precisando fazer uma galeria de fotos, ai o que eu queria fazer é criar todos os movie clips (que no caso serao os thumbails) direto pelo Action Script 2, eu tentei fazer com um for mas is nao deu certo.

e se possivel eu tambem preciso que os movie clips fossem criados um ao lado do outro.

 

foi mais ou menos assim que eu tentei fazer

 

for(i=0;i<10;i++){

_root.createEmptyMovieClip("thumb" +i,1);

loadMovie("imagemAqui");

}

 

flws !!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

to tentando, mas ainda nao obtive sucesso, eu nao to conseguindo por pra funciona

no caso ele so ta colocando a primeira foto.

this.createEmptyMovieClip("base",this.getNextHighestDepth());
for(i=0;i<=5;i++){
	var copia = base.duplicateMovieClip(base,"foto"+i,1);
	var espacoH = 80 * i;
	setProperty("copia",_x,espacoH);
	setProperty("copia",_y,5);
	setProperty("copia",_xscale,75);;
	setProperty("copia",_yscale,75);
	copia.loadMovie(images[i]);
	copia.onPress = onclick;
}

fwls

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem que definir um depth (level ou camada) para cada cópia, no seu codigo esta o numero 1 para todos

então deixa assim:

 

var maiorDepth = this.getNextHighestDepth();
var copia = base.duplicateMovieClip("foto"+i,maiorDepth );

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem que definir um depth (level ou camada) para cada cópia, no seu codigo esta o numero 1 para todos

então deixa assim:

 

var maiorDepth = this.getNextHighestDepth();
var copia = base.duplicateMovieClip("foto"+i,maiorDepth );

eu ja tentei fazer desse jeito mas tambem nao funcionou

Compartilhar este post


Link para o post
Compartilhar em outros sites

SALVE !!!!!!!!!!!!!!!!!!!!!!!

 

consegui finalmente

pelo que eu entendi o que eu estava fazendo era criar o moviclip no lugar errado(pelo menos eu acho).

 

na linha que eu crio o movi clip foi so adicionar o _root, ai ficou assim:

var copia = _root.base.duplicateMovieClip("foto"+i,maiorDepth);

 

agora funcionou que é uma beleza

 

POREM ....

sem querer abusar da boa vontade de voces

eu queria que qunado fosse passado o mouse sobre a foto fosse chamada uma função.

A função esta pronta e funciona mas eu nao sei como fazer o movieclip criado chamar a função quando ocorrer o evento.

 

eu to tentando adicionar um listener mas nao ta dando muito certo.

 

flws

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe a falta de conhecimento em flash mas eu nao entendi muito bem como fazer.

 

eu ja tentei de varios jeitos diferentes

esse aqui eu adicionei no for que cria os cria os thumbs

var nomeFoto = "foto" +i;
caminhoMc.nomeFoto.onRollOver = function(){
	animaThumb("thumb"+i,nomeFoto,0);
}

ja tentei colocar fora do for

caminhoMc.foto1.onRollOver = function(){
	animaThumb("thumb1",foto1,0);
}

tambem nao funcionou

 

flws

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom para fazer rollOver em MC criados dinamicamente 1 a 1...

 

Você tem que fazer isso na função onloadInit do clip e usar a classe MovieClipLoader().

 

Tem alguns exemplos pelo forum... fora na parte de tutoriais

E floodar respostas suas é contra as regras do forum

Leia as regras

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora falta pouco.

 

eu consegui adicionar os eventos(RollOver,RollOut,Release), o problema é que os eventos so funcionam na ultima imagem, segue o codigo.

 

import mx.transitions.Tween;
import mx.transitions.easing.*;

function animaThumb(instancia,obj,flag){
	var altura = 0;
	var largura = 0;
	if(flag == 0){
		altura = 110;
		largura = 110;
	}else{
		altura = 75;
		largura = 75;
	}
	var instancia:Tween = new Tween(obj,"_width",Elastic.easeOut,obj._width,largura,1,true);
	var instancia:Tween = new Tween(obj,"_height",Elastic.easeOut,obj._height,altura,1,true);
}


//caminho para o MC
var caminhoMc = _root.flashmo_contents.produtos;

//caminho onde estao as imagems
var caminho = "Original/";

//array com o nome das imagens
var images = new Array("aguaSanitaria.jpg","aguaSanitaria.jpg","aguaSanitaria.jpg","aguaSanitaria.jpg","aguaSanitaria.jpg","aguaSanitaria.jpg");

//cria um movie cllip vazio que serve como base para ser duplicado
caminhoMc.createEmptyMovieClip("base",caminhoMc.getNextHighestDepth());

//for que cria os thumbs
for(i=0;i<=5;i++){	
	//cria uma instancia da classe MOVIE CLIP LOADER
	var mcl = new MovieClipLoader();
	
	//da o maior depth para o MC
	var maiorDepth = caminhoMc.getNextHighestDepth()
	
	//a variavel COPIA recebe o MC duplicado
	var copia = caminhoMc.base.duplicateMovieClip("foto"+i,maiorDepth);
	
	mcl.loadClip(caminho+images[i],copia);
	
	//da um espaço entre cada MC
	var espacoH = 85 * i;
	//define as propriedades do MC copiado
	copia._x = espacoH;
	copia._y = 5;
	copia._xscale = 75;
	copia._yscale = 75;
	
	mcl.onLoadInit = function(mcl):Void{
		copia.onRollOver = function(){
			animaThumb("thumb"+i,copia,0);
			
		}
		
		copia.onRollOut = function(){
			animaThumb("thumb"+i,copia,1);
		}
		
		copia.onRelease = function(){
			trace("Clicado");
		}
	}
}

o que eu acho que esta acontecendo é que em cada iteraçao do for eu estou reescrevendo a classe ai a unica que funciona é a ultima, porem eu nao sei como consertar isso.

 

so mais uma coisinha, quando eu seto o tamanho do mc (copia._xscale = 75) ; ) o mc fica muito maior do que 75, se alguem souber o que é ejuda bastante.

 

flws

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 - É isso mesmo, do jeito que está vai guardar sempre a última variável do laço de repetição... Você deve setar um novo caminho para a variável e nas ações chame por este novo caminho ao invés da variável "i".

 

2 - Lembre-se que o "_xscale" e "_yscale" trabalham com valores em percentuais e não em pixels...

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem eu sei que vai contra as regras mas o topico fico meio "perdido no limbo", ai eu teria que abrir outro topico com a mesma duvida e começar tudo de novo, me perdoem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A pergunta agora é diferente da primeira...

 

Você quer saber como setar um nome diferente

 

E isso é simples

var duplicate:MovieClip = container.duplicateMovie('valor'+i, i);

Onde i é um contador e o container é o movieclip a ser duplicado

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu fiz exatamente e isso mesmo

var copia = caminhoMc.base.duplicateMovieClip("foto"+i,maiorDepth);

So que as açoes(onrollover, onrollout, onclick) para os botoes, funciona somente na ultima imagem, ai o Public2004 disse.

1 - É isso mesmo, do jeito que está vai guardar sempre a última variável do laço de repetição... Você deve setar um novo caminho para a variável e nas ações chame por este novo caminho ao invés da variável "i".

 

ai eu nao entedi como eu vou fazer essa parte. na hora de chamar os botoes esta assim

mcl.onloadInit = function(mcl):Void{
                copia.onRollOver = function(){
                        animaThumb("thumb"+i,copia,0);
                        
                }
                
                copia.onRollOut = function(){
                        animaThumb("thumb"+i,copia,1);
                }
                
                copia.onRelease = function(){
                        trace("Clicado");
                }
        }

flws

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso ai você ta pondo a ação no COPIA

Você tem que por ação no que é o equivalente...

 

Para funcionar melhor faça assim:

var copia:Array = new Array();
copia[i] = caminhoMc.base.duplicateMovieClip("foto"+i,maiorDepth);

Ai nos seus botões em vez de usar cópia você usa copia

 

Lembre-se de declarrar essa array ai láaaaaaaaaaaaaaaaaa no começo do seu arquivo flash... fora de funções fora de tudo de preferencia uma das primeiras linhas do seu script.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois de tantas sugestões, acho que confundiu um pouco, então se me permitem, segue o código com algumas correções (baseado no seu exemplo). Compare com o seu código e entenda as alterações. Testa ae!

import mx.transitions.Tween;
import mx.transitions.easing.*;
function animaThumb(instancia, obj, flag) {
	var altura = 0;
	var largura = 0;
	if (flag == 0) {
		altura = 110;
		largura = 110;
	} else {
		altura = 75;
		largura = 75;
	}
	var instancia:Tween = new Tween(obj, "_width", Elastic.easeOut, obj._width, largura, 1, true);
	var instancia:Tween = new Tween(obj, "_height", Elastic.easeOut, obj._height, altura, 1, true);
}
//caminho para o MC
var caminhoMc = _root.flashmo_contents.produtos;
//caminho onde estao as imagems
var caminho = "Original/";
//array com o nome das imagens
var images = new Array("aguaSanitaria.jpg","aguaSanitaria.jpg","aguaSanitaria.jpg","aguaSanitaria.jpg","aguaSanitaria.jpg","aguaSanitaria.jpg");
//cria um movie cllip vazio que serve como base para ser duplicado
caminhoMc.createEmptyMovieClip("base", caminhoMc.getNextHighestDepth());
//for que cria os thumbs
for (i=0; i<=images.length; i++) {
	//a variavel COPIA recebe o MC duplicado
	var copia = caminhoMc.base.createEmptyMovieClip("foto"+i, i);
	//da um espaço entre cada MC
	var espacoH = 85*i;
	//define as propriedades do MC copiado
	copia._x = espacoH;
	copia._y = 5;
	copia._xscale = 75;
	copia._yscale = 75;
	//cria uma instancia da classe MOVIE CLIP LOADER
	var mcListener:Object = new Object();
	var mcLoader:MovieClipLoader = new MovieClipLoader();
	mcListener.onLoadInit = function(copia):Void  {
		copia.onRollOver = function() {
			animaThumb("thumb", this, 0);
		};
		copia.onRollOut = function() {
			animaThumb("thumb", this, 1);
		};
		copia.onRelease = function() {
			trace("Clicado");
		};
	};
	mcLoader.addListener(mcListener);
	mcLoader.loadClip(caminho+images[i], copia);
}

Abs e bom estudo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Abs e bom estudo.

 

Realmente eu preciso mesmo http://forum.imasters.com.br/public/style_emoticons/default/graduated.gif , porem agora eu vo ver se cnsigo passar direto pro AS3.

 

deu certo eu consegui fazer o que precisava, muuuutissimo obrigado pela ajuda dos dois, voces nao sabem como eu to faliz de ter terminado isso.

 

valeu de verdade.

 

flws, ate o proximo topico :D :D :D

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.