Ir para conteúdo

Arquivado

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

fernando1

[Resolvido] Criar 2 ou mais MovieClip Vazios via AS

Recommended Posts

Boa Tarde Pessoal!

 

A coisa ta feia aqui, hahaa.., quebrei muito a cuca e to precisando de um help!!! ;)

 

Seguinte estou desenvolve um site aqui com Flash + PHP + Mysql, ate ai tudo bem!

Esta saindo e funfando as coisas :D

 

O problema é o seguinte:

 

Pego algumas imagens do banco de dados , e preciso colocar elas em movieclips um do lado do outro em um SWF... Para ficar simples, pensemos em 3 imagens.

Ate puxar do banco de dados e trazer, etc.. tranquilo..

Preciso saber uma forma de criar mais de um movieclip vazio por action script.

 

Tudo bem existe a função :

var movieclip = _root.createEmptyMovieClip('alvo'+i,_root.getNextHighestDepth()); // onde alvo seria o nome e poderia colocar isso dentro de um for , com a variável i incrementando

 

Depois dou um loadMovie();

 

so que cada movieclip eu preciso posiconar suas coordenadas(x e y) com valores diferentes , para ficar um do lado do outro!

 

movieclip._x = x_inicial; // Posição X do movieclip

movieclip._y = y_inicial; // Posição Y do movieclip

 

abaixo faço:

 

x_inicial = espaco_x * i // lembra a variavel "i" de incremento....

x_inicial = espaco_x * i // lembra a variavel "i" de incremento....

 

 

O que esta acontecendo é que, um movieclipe sobrepoem o outro, ou seja o flash não esta entendendo que cada um é separado e esta usando o mesmo movieclip para incluir e poscionar o outro.

 

 

Fico no Aguardo, ja estou enrrolado com isso a dias... ;)

 

Obrigado pela ajuda http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

fenando1, Seja bem vindo ao fórum.

 

Entendi o que quer, mas me perdi nos seus exemplos, então resumidamente crie as variáveis como número inicial de linha e coluna, também uma com a quantidade de colunas desejadas e uma com o total de objetos que serão carregados;

Depois no laço for e dentro de uma condição, verifique se o valor atribuido a variavel da coluna é menor ou igual o valor da quantidade de colunas, caso ok, você cria o mc para carregar os objetos e vai verificando em cada laço se atingiu o número de colunas (sempre incrementando mais um na variável inicial da coluna), quando atingir, vai para uma segunda condição onde retorna o valor inicial para a variável da coluna e acrescenta mais um agora na variável da linha.

Quanto ao espaçamento dos mc's, crie variáveis com estes valores e a cada laço altere as posições, pois quando você cria o mc vazio ele é 0 por 0.

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 jeito é esse aqui:

var alvo:MovieClip = fotos+i;
alvo = createEmptyMovieClip("alvo"+i, _root.getNextHighestDepth());

Assim você vai criar nomes diferentes para a mesma variavel... isso ai tem que ser colocado dentro de um laço for

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado a todo por tentar ajudar

 

Berseck, tentei fazer o que você postou mais infelizmente não resolveu..

 

Bom acho que não explessei direito o que esta acontecendo...

 

Vou detalhar melhor e por o codigo abaixo explicando como

fiz, talvés assim fique melhor para compreender.. ;)

 

 

Bom resumindo, tenho um SWF, e dentro dele precis carregar por exemplo 3 movieclips vazios, onde em cada um vou colocar um outro arquivo SWF,

por exemplo.

 

PROBLEMA: O que ocorre é que so está carregando a primeira imagem nos 3 movieclips vazio.

 

No banco de dados esta certo, incluisve testei o codigo, o php retorna certinho todas as imagens e devolve para o flash.

 

 

Segue o código abaixo detalhado, ele esta marcado por linhas, abaixo explico o conteúdo de cada linha:

 

 

1) var id_tipo_projeto = 1;

 

2) // Definindo Variáveis inicial do movieclip

3) _global.x_inicial = 13; // posição x inicial do primeiro movieclip

4) _global.y_inicial = 63; // posição y inicial do primeiro movieclip

5) _global.espaco_x = 124; // espaço horizontal entre movieclips

6) _global.espaco_y = 84; // espaço vertical entre movieclips

 

7) // Objeto LoadVars.

8) var retorno:LoadVars = new LoadVars();

9) // Carrega o arquivo PHP 'lista_portfolio.php'.

10) retorno.load('lib/flash_php/lista_portfolio.php?id_tipo_projeto='+id_tipo_projeto);

11) // Ao arquivo ser carregado, a função 'carregarDados' é chamada.

12) retorno.onLoad = carregarDados;

 

 

14) function carregarDados() {

 

15) // se a quantidade de linhas for maior que 0, exibe os portfolios encontrados

16) if (this.nlinhas > 0) {

17) for (i=1; i <= this.nlinhas; i++) {

 

18) //cria um movie clip vazio é atraves desse movieclip, que vamos posicionar os portfolios

19) var target_mc = _root.createEmptyMovieClip('alvo'+i, i);

 

20) with(target_mc) {

21) loadMovie("box_portfolio.swf?id_tipo_projeto="+id_tipo_projeto+"&id_projeto="+this["id_projeto"+i]);

22) _x = x_inicial;

23) _y = y_inicial;

24) }

 

25) x_inicial = espaco_x * this.nlinhas;

 

26) if ((this.nlinhas % 3) == 0){ y_inicial = espaco_y * this.nlinhas; }

 

27) } // end for

28) }

 

29) } // End Function

 

 

EXPLICANDO AS LINHAS

 

1) id_tipo_projeto, é uma variável que esta no meu banco de dados, ela especifica qual projeto pode ser, 1- WEB, 2- E-mail Marketing, etc.. No caso destes moviesclip que vou carregar

todos são do tipo 1.

 

3) Posição inicial X do primeiro movieclip

4) Posição inicial Y do primeiro movieclip

5) Espaço Horzontal entre movieclipes ( ou seja, o tamanho de um movieclip, mais o espaço entre eles)

6) Espaço Vertical entre movieclipes ( ou seja, o tamanho de um movieclip, mais o espaço entre eles)

Obs: as linhas 5 e 6 são exatamente onde iram começar o próximo movieclip

 

8) Declaro uma variável retorno do tipo LoadVars();

10) Pego a propriedade load da variável retorno, onde chamo meu arquivo PHP, passando por parametro a variável id_tipo_projeto, sendo igual 1

12) Chamo uma função onde meu arquivo PHP vai devolver o resutado esperado , no caso as imagens do banco

14) A função de resposta do arquivo PHP

16) A variável " this.nlinhas " ,traz a quantidade de linhas encontrada no banco.

17) Um for para passar em cada linha encontrada , usando a "variável i" como incremento

19) Criei um movieclip com o nome alvo + a variavel de incremento i e atribui a variável target_mc

21) À esta variável, carrego o arquivo box_portfolio.swf sendo que para dentro deste arquivo passo a variável "id_tipo_projeto" que é 1 (padrão, todos vão ser iguais)

e a variável id_projeto ( onde cada vez que passo no for chamo como id_projeto+i, pq quando veio do banco ela veio como projeto1=id&projeto2=id, ou seja cada linha

do banco em uma variável distinta) , assim obtenho cada imagem do banco de dados onde aplico uns efeitos neste movie, e carrego ele.

22) Posição horizontal deste movie box_portfolio.swf, dentro do meu swf

23) Posição vertical deste movie box_portfolio.swf, dentro do meu swf

25) Incremento a posição horizontal do moviclip, para que o próximo não saia sobre a posição do anterior

26) Como tem que ter 3 movieclips por linha, a cada 3 eu incremento a posição vertical do moviclip, para que eles desce na linha de baixo.

 

Bom espero que isso ajude.

 

Fico no aguardo ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom para você ver o que você está fazendo corretamente

 

Utilize o setInterval em vez de for... assim ele vai fazer a mesma função só que vocÊ vai ter de trabalhar com if e else para setar o I

Podendo assim vocÊ ver com um intervalo de tempo o que ta ocorrendo com o seu código.

 

Vou dizer adiantado que o que você ta fazendo é re-criando o mesmo carregador varias vezes... e como ele já ta na tela... ele só vai pegar novamente esse carregador e colocar o novo elemento dentro dele com o loadMovie.

 

O que você deve usar é o duplicateMovie();

 

Que assim ele vai criar vários MovieClips de acordo com a sua necessidade e não vai ficar sobrescrevendo o mesmo.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Berseck! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Entendi o que esta acontecendo..

Tem que usar o duplicateMovieClip();

 

Até sua estrutura tudo bem, poderia ser algo do tipo:

 

duplicateMovieClip('mc_atual','mc_novo'+i, _root.getNextHighestDepth());

 

sendo " i " a variável de incremento, colocando este comando dentro do for, para cada vez que ele passar no laço, criar um novo movieclip!

 

A dúvida é o seguinte:

 

Tipo como chamo as propriedades do novo movieclip.

Por exemplo:

 

Para alterar a posição X do mc_atual fica : mc_atual._x = 50;

No caso do 'mc_novo'+i como faço? :huh:

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ficaria +/- assim:

 

var foto:MovieClip = duplicar();

function inicia(){
for(var i=0;i<10;i++){
newX = i * (50);
duplicate = foto.duplicateMovieClip("foto-"+i, i, {_x:newX});
duplicate.loadMovie(imagens[i]);
};
//Função responsavel pelo clip duplicado
function duplicar():MovieClip {
	var mc:MovieClip = _root.createEmptyMovieClip("foto", this.getNextHighestDepth());
	mc._x = 0; //posição inicial do clip x
	mc._y = 0; //posição inicial do clip y
	return mc;
};

 

Da uma lida no help do Flash que ele ensina direitinho basta copy paste :P

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaiz, o negôcio aqui ta estranho :unsure:

 

Fiz extamente como você falou, usando "duplicateMovieClip"

 

No meu exemplo to usando:

 

var mc_alvo:MovieClip = mc_inicial.duplicateMovieClip("alvo"+i,i);

 

isso dentro do for para duplicar o movieclip chamado "mc_inicial"

 

Até funciona perfeitamente, quantos eu necessitar ele cria, porém, quando é criado, altera o conteúdo dos outros também.

 

Vou dar um exemplo:

 

Suponha que necessite inserir dois arquivos SWF de fora no meu SWF. Quando inseri o primeiro, sai legalzinho, agora quando vai inserir o segundo,

ele ate posiciona em uma outro lugar que mandei ( ou seja não sobrepõem o anterior), más é alterado o conteudo do segundo e do primeiro, sendo

que era para alterar somente do segundo.

 

Coisa de doido :blink:

 

O que será que estou fazendo errado? Eu acho que esta var que crio chamada "mc_alvo", teria que ser criada dinâmicamente, sei la,

juntando com a varíavel "i" de incremento do for, por exemplo.

No entanto não sei como fazer isso no flash, ai esta meu problema :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom amigo vamos lá :P

 

Vou dar 2 links do meu blog onde explica como usar o DuplicateMovieClip()

 

E um com uma galeria que usa o DuplicateMovieClip() como exemplo...

 

Ai tu vai ter +/- uma ideia de como funciona acredito eu. Pelo menos acho que ta bem explicadinho :P

 

Qualquer duvida comenta lá ou pergunta aqui que respondo.

 

Explicação

Exemplo

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Berseck.., beleza?

 

Então veio, baixei o exemplo e verifiquei todo o código la..

 

Implementei de acordo com o padrão que seguia la.., Até como funciona a duplicação eu entendi e sei fazer, entretanto, esta acontecendo

uma coisa de louco aqui.... :blink:

 

Tipo, o código esta parecido, tudo bunitinho, más o filho da mãe insiste em duplicar a mesma imagem no primeiro e no segundo ( ele varia, as vezes pega a primeira

imagem e duplica nos dois, ou as vezes pega a segunda e duplica nos dois)

 

O que será que tem de errado nessa geringoça... :P , Meu já to ficando maluco com isso :unsure:

 

Segue o código abaixo:

 

Este é o SWF principal, que vai carregar as imagens :

 

 

 

// Definindo Variáveis inicial do movieclip

_global.id_tipo_projeto = 1; // Projetos WEB

_global.espaco_x = 124; // espaço horizontal entre movieclips

_global.espaco_y = 84; // espaço vertical entre movieclips

 

 

// Definindo Variáveis padrão do movieclip

var foto:MovieClip = duplicar();

var duplicate:MovieClip = new MovieClip();

var mcl:MovieClipLoader = new MovieClipLoader();

 

//Função responsavel pelo clip duplicado

function duplicar():MovieClip {

var mc:MovieClip = _root.createEmptyMovieClip("foto", this.getNextHighestDepth());

mc._x = 13; //posição inicial do clip x

mc._y = 63; //posição inicial do clip y

return mc;

} // End Function

 

 

// Objeto LoadVars.

var retorno:LoadVars = new LoadVars();

// Carrega o arquivo PHP 'lista_portfolio.php'.

retorno.load('http://servidor/officinadigital/site2009/lib/flash_php/lista_portfolio.php?id_tipo_projeto='+id_tipo_projeto);

// Ao arquivo ser carregado, a função 'carregarDados' é chamada.

retorno.onLoad = carregarDados;

 

function carregarDados() {

 

var x_inicial:Number = 13;

var y_inicial:Number = 63;

 

// se a quantidade de linhas for maior que 0, exibe os portfolios encontrados

if (this.nlinhas > 0) {

 

for (var i:Number = 1; i <= this.nlinhas; i++) {

 

duplicate = foto.duplicateMovieClip("foto"+i,i,{_x:x_inicial,_y:y_inicial});

 

mcl.loadClip("http://servidor/officinadigital/site2009/box_portfolio.swf?id_projeto="+this["id_projeto"+i], duplicate);

 

x_inicial = espaco_x * this.nlinhas;

if ((this.nlinhas % 3) == 0){ y_inicial = espaco_y * this.nlinhas; }

 

} // End for

 

} // End If

 

//adiciono o listener

mcl.addListener(this);

 

} // End Function

 

 

 

Bom o php deste código vai me retornar a seguinte linha: id_projeto1=1&id_projeto2=2&nlinhas=2

Se você perceber na linha:

mcl.loadClip("http://servidor/officinadigital/site2009/box_portfolio.swf?id_projeto="+this["id_projeto"+i], duplicate);

estou chamando um movieclip externo, onde dentro ele, recebe a variável do id_projeto

 

Bom segue agora o código desse movieclip interno:

 

 

// Objeto LoadVars.

var retorno:LoadVars = new LoadVars();

 

// Carrega o arquivo PHP 'portfolio.php'.

/* === id_tipo_projeto ==

1 - Sites, 2 - E-mail Marketing, 3 - Banner, 4 - Logotipo, 5 - Impresso

*/

 

/* === id_projeto ===

Identifica o projeto que vai ser carregado */

 

//var id_tipo_projeto = 1;

//var id_projeto = 1;

 

retorno.load("http://servidor/officinadigital/site2009/lib/flash_php/portfolio.php?id_tipo_projeto="+id_tipo_projeto+"&id_projeto="+_root.id_projeto);

 

// Ao arquivo ser carregado, a função 'carregarDados' é chamada.

retorno.onLoad = carregarDadosPortfolio;

 

 

function carregarDadosPortfolio() {

// Carrega a imagem do banco vindo do arquivo portfolio.php para variáveis

_root.img_box_port = this.img_box;

_root.id_projeto = this.id_projeto;

} // End Function

 

Dai dentro desse swf, depois desse action, tenho um movclip, que executo umas animações.

 

Dai depois dessas animações eu faço o seguinte

 

loadMovie(_root.img_box_port,img_box_portfolio);

 

Ou seja carrega a imagem, para dentro do "movieclip img_box_portfolio"

 

 

OBS: se eu testar o swf interno, separadamente, passando parametros na URL, funciona perfeitamente ;)

 

Desculpe incomodar assim, más os neurônios, ja estão fervendo aqui :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... o problema de duplicar a imagem eu não entendi não O.o...

 

Pois o código acima não permite a duplicata da imagem... ele vai criar um novo clip a cada rodada... acredito eu...

 

Poderia disponibilizar o fla para se ver realmente o que ta acontecendo???

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faka Berseck!

 

Então veio, zipei aqui os arquivos que você pediu.

 

Estão no link abaixo para baixar:

 

 

http://dev.officinadigital.com.br/officina...e(Fernando).zip

 

 

OBS: O arquivo "portf_web1" é o primeiro a carregar, dai ele chama o outro...

 

Qualquer dúvida, ou se precisar de algo avisa.... ;)

 

Fico no Aguardo..

 

Obrigado ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

[Resolvido]

 

Fala Berseck!

 

Rapaiz, consegui resolver essa geringonça aqui http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

Nem eu to acreditando.., vou abrir um champanhe :P

 

 

Seguinte, o problema que estava ocorrendo, é que da forma feita, o sistema estava assumindo a mesma instance para todos os movieclips duplicados.

 

Dai veio uma idéia loca na minha cabeça, olha o que mudei:

 

Antigamente estava:

 

duplicate = foto.duplicateMovieClip("foto"+i,i,{_x:x_inicial,_y:y_inicial});

 

mcl.loadClip("http://servidor/officinadigital/site2009/box_portfolio.swf?id_projeto="+this["id_projeto"+i], duplicate);

 

 

Na verdade você não precisa disto, basta uma variável que crie o movieclip vazio, como a "foto" ta fazendo, entretanto ficaria assim :

 

foto.duplicateMovieClip("foto"+i,i,{_x:x_inicial,_y:y_inicial});

 

loadMovie("http://servidor/officinadigital/site2009/box_portfolio.swf?id_projeto="+this["id_projeto"+i],_root["foto"+i]);

 

 

ou seja cada vez que duplicar o nome da "estancia" vai assumir "foto"+i

dai dentro do loadMovie basta mandar carregar em _root["foto"+i]

 

Bom, quero agradeçer ao Public2004 e ao Berseck que tentaram me ajudar, muito obrigado...

 

Abraços

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.