Curso AS3

Estruturas de Repetição

As estruturas de repetição são utilizadas quando necessitamos realizar comandos diversas vezes, como por exemplo, imprimir um array ou duplicar um movieClip milhares de vezes.

Estrutura for

A estrutura for executará comandos enquanto a condição for verdadeira. A sintaxe desta estrutura é a seguinte:

for(inicial; condição; próximo) { 
	[comandos];
}
  • inicial: valor inicial, que é lido apenas uma vez.
  • condição: condição que determinará quantas vezes o loop rodará, é verificada antes de cada loop.
  • próximo: é executado a cada loop.

Exemplo

for(velocidade = 1; velocidade <= 100; velocidade++) { 
	trace(velocidade);
}

A variável velocidade é zero, enquanto a esta variável for menor ou igual a 100, esta será incrementada a cada loop, e os comandos definidos entre as chaves serão executados, no exemplo é impresso o valor atual da variável a cada loop.

Outro Exemplo

Crie um movieClip e o instancie de ESouza, aplique o código abaixo no primeiro frame.

for(i=1; i <= 100; i++){	
	var randomX:Number = Math.floor(Math.random() * 400)+1;
	var randomY:Number = Math.floor(Math.random() * 300)+1;
	var randomScale:Number = Math.floor(Math.random() * 60)+1;
	var randomOpac:Number = Math.floor(Math.random() * 100)+1;
	var randomRot:Number = Math.floor(Math.random() * 360)+1;
 
	duplicateMovieClip("ESouza", "Esouza" + i, i);
	_root["Esouza" + i]._x = randomX;
	_root["Esouza" + i]._y = randomY;
	_root["Esouza" + i]._xscale = randomScale;
	_root["Esouza" + i]._yscale = randomScale;
	_root["Esouza" + i]._alpha = randomOpac;
	_root["Esouza" + i]._rotation = randomRot;
}

No código acima o movieClip Esouza foi duplicado cem vezes utilizando a estrutura de repetição for, e para que a posição, escala, rotação e a opacidade variassem, foi utilizado o método Math.random.

Estrutura for..in

Utiliza-se o for..in para regatar as propriedades de objetos e elementos de um array. A sintaxe desta estrutura é a seguinte:

for (variável in objeto) {
	[comandos];
}
  • variável: nome da variável, esta receberá valores temporários a cada loop.
  • objeto: o nome do objeto.
  • comandos: é executado a cada propriedade do objeto.

Exibindo as propriedades de um objeto:

var usuarios:Object = {Erick:"Flash", Maria:"Flex", João:"Open Lazlo"};
for(var lista in usuarios){
	trace(lista + " gosta do " + usuarios[lista]);
}

Exibindo os elementos de um array:

Exemplo

var nome:Array = new Array("Erick", "Maria", "João");
 
for(var lista in nome){
	trace("Olá " + nome[lista]);
}

Outro exemplo

var nome:Array = new Array("Erick", "Maria", "João");
 
for(var lista in nome){
	trace("nome[" + lista + "] = "+ nome[lista]);
}

Estrutura while

Como o for, o while é repetido enquanto a condição for verdadeira. A sintaxe desta estrutura é a seguinte:

while(condição){
	[comandos];
}

Exemplo

var velocidade:Number = 1;
while(velocidade <= 100 ){
	trace(velocidade);
	velocidade++;
}

Exemplo de duplicação de movieClip

var i:Number = 0;
while(i < 100 ){
	i++;
 
	var randomX:Number = Math.floor(Math.random() * 400)+1;
	var randomY:Number = Math.floor(Math.random() * 300)+1;
	var randomScale:Number = Math.floor(Math.random() * 60)+1;
	var randomOpac:Number = Math.floor(Math.random() * 100)+1;
	var randomRot:Number = Math.floor(Math.random() * 360)+1;
 
	duplicateMovieClip("ESouza", "Esouza" + i, i);
	_root["Esouza" + i]._x = randomX;
	_root["Esouza" + i]._y = randomY;
	_root["Esouza" + i]._xscale = randomScale;
	_root["Esouza" + i]._yscale = randomScale;
	_root["Esouza" + i]._alpha = randomOpac;
	_root["Esouza" + i]._rotation = randomRot;
}

Estrutura do.. while

A diferença do while em comparação ao do.. while, é que no do.. while, a verificação é feita após a execução dos comandos, portanto, mesmo que a condição seja falsa, os comandos serão executados pelo menos uma vez.

var velocidade:Number = 1;
do{
	trace(velocidade);
	velocidade++;
}while(velocidade <= 100 );

20 Responses to “Estruturas de Repetição”

  1. malva Says:

    Ola! Muito legal sua explicação!! Valeu mesmo!
    Bom, se eu quiser ter esse efeito de duplicação, mas aos poucos e usando um efeito tween, como poderia ser feito?

    Um grande abraço

  2. Erick Souza Says:

    Oi Malva, veja um exemplo seguindo o artigo:

    import mx.transitions.Tween;
    import mx.transitions.easing.*;
     
    quantidade = 0;
     
    function duplicar():Void{
    var randomX:Number = Math.floor(Math.random() * 400)+1;
    var randomY:Number = Math.floor(Math.random() * 300)+1;
    var randomScale:Number = Math.floor(Math.random() * 60)+1;
    var randomOpac:Number = Math.floor(Math.random() * 100)+1;
    var randomRot:Number = Math.floor(Math.random() * 360)+1;
     
    duplicateMovieClip(_root.ESouza, 'Esouza' + quantidade, quantidade);
    _root['Esouza' + quantidade]._x = randomX;
    _root['Esouza' + quantidade]._y = randomY;
    _root['Esouza' + quantidade]._xscale = randomScale;
    _root['Esouza' + quantidade]._yscale = randomScale;
    _root['Esouza' + quantidade]._alpha = 0;
    _root['Esouza' + quantidade]._rotation = randomRot;
     
    var alphaMc:Tween = new Tween(_root['Esouza' + quantidade], '_alpha', Regular.easeOut, 0, randomOpac, 1, true);
     
    quantidade++;
    if(quantidade > 100) clearInterval(interval);
    };
     
    interval = setInterval(duplicar, 5);

  3. Malva Says:

    Opa! Legal você ter respondido, mas não estou conseguindo usar esse código, desculpe, vc poderia explicá-lo?

    Um grande abraço
    Malva

  4. Erick Souza Says:

    Malva, instancie um movieClip de ESouza, e aplique o código na Timeline.
    Se tiver alguma dúvida em alguma parte do código, indique para que eu possa lhe ajudar. Abraços. :-)

  5. Malva Says:

    Fiz isso e está dando esse erro aqui:
    ” **Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 13: This type of quotation mark is not allowed in ActionScript. Please change it to a standard (straight) double quote.
    duplicateMovieClip(”ESouza”, “Esouza” + quantidade, quantidade);

    [...]

    **Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 21: This type of quotation mark is not allowed in ActionScript. Please change it to a standard (straight) double quote.
    var alphaMc:Tween = new Tween(_root[”Esouza” + quantidade], “_alpha”, Regular.easeOut, 0, randomOpac, 1, true);

    Total ActionScript Errors: 8 Reported Errors: 8″

  6. Erick Souza Says:

    Malva o que aconteceu foi que o sistema do Blog converteu as aspas para um tipo não permitido no Actionscript, seja aspas simples ou duplas, é preciso que sejam retas., veja:

    “[...]This type of quotation mark is not allowed in ActionScript. Please change it to a standard (straight) double quote.[...]“.

    Eu postei novamente o código entre as tags [code] e ele preservou a código, instancie o movieClip de ESouza e copie o código acima novamente.

  7. Malva Says:

    Legal deu certo agora!!
    Obrigado!!

    Hum ficou muito bom!
    Parabens!
    Mais um favor: De uma olhada no meu site e veja que esta lento, não usei “tween” sera que pode ser isso de o deixa lento? Usei action
    [as]onClipEvent (enterFrame) {
    this._xscale += F=F*0.6+(_root.cX-this._xscale)/(T=10);
    this._yscale += F=F*0.6+(_root.cY-this._yscale)/(T=10);

    }[as]

  8. Malva Says:

    errei!
    [...]onClipEvent (enterFrame) {
    this._xscale += F=F*0.6+(_root.cX-this._xscale)/(T=10);
    this._yscale += F=F*0.6+(_root.cY-this._yscale)/(T=10);

    }[...]

  9. Erick Souza Says:

    Provavelmente Malva, muitos onEnterFrame deixam o filme lento, faz assim, após cada animação finalizar, delete o onEnterFrame. Utilize a instrução delete. Ex: [as]delete instanciaMc.onEnterFrame;[/as]

  10. Malva Says:

    Ola Erick muito obrigado pela atenção, mas essa função coloco no primeiro frame do meu filme?

    Um abraço
    Malva

  11. cristiane marcilia Says:

    olá tenho uma dúvida, com relação à xml no flash, estou tentando carregar um swf dentro de outro swf, só que o swf que esta sendo chamado contém parametros para o xml mas quando chamado não carrega o xml.
    Na verdade é uma galeria de fotos, que chamo as fotos pelo xml, você pode me ajudar?
    Desde já agradeço a atenção.

  12. Débora Says:

    oi eu to com um problema tenho um algoritmo para fazer mais naum sei nem por onde começar .. hauHAUhau
    sera que alguem pode me ajudar??

  13. adilson Says:

    Erick SouzaRSS Feed

    Digite os termos da sua pesquisa Enviar formulário de pesquisa
    Web blog.ericksouza.com

    ——————————————————————————–
    Estruturas de Repetição
    April 15th, 2006 by Erick Souza

    As estruturas de repetição são utilizadas quando necessitamos realizar comandos diversas vezes, como por exemplo, imprimir um array ou duplicar um movieClip milhares de vezes.

    Estrutura for
    A estrutura for executará comandos enquanto a condição for verdadeira. A sintaxe desta estrutura é a seguinte:

    PLAIN TEXT
    Actionscript:
    for(inicial; condição; próximo) {
    [comandos];
    }

    inicial: valor inicial, que é lido apenas uma vez.
    condição: condição que determinará quantas vezes o loop rodará, é verificada antes de cada loop.
    próximo: é executado a cada loop.
    Exemplo

    PLAIN TEXT
    Actionscript:
    for(velocidade = 1; velocidade 100) clearInterval(interval);
    };

    interval = setInterval(duplicar, 5);

    Malva:

    September 3rd, 2006 at 10:51
    Opa! Legal você ter respondido, mas não estou conseguindo usar esse código, desculpe, vc poderia explicá-lo?

    Um grande abraço
    Malva

    Erick Souza:

    September 3rd, 2006 at 11:17
    Malva, instancie um movieClip de ESouza, e aplique o código na Timeline.
    Se tiver alguma dúvida em alguma parte do código, indique para que eu possa lhe ajudar. Abraços.

    Malva:

    September 3rd, 2006 at 14:34
    Fiz isso e está dando esse erro aqui:
    ” **Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 13: This type of quotation mark is not allowed in ActionScript. Please change it to a standard (straight) double quote.
    duplicateMovieClip(”ESouza”, “Esouza” + quantidade, quantidade);

    […]

    **Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 21: This type of quotation mark is not allowed in ActionScript. Please change it to a standard (straight) double quote.
    var alphaMc:Tween = new Tween(_root[”Esouza” + quantidade], “_alpha”, Regular.easeOut, 0, randomOpac, 1, true);

    Total ActionScript Errors: 8 Reported Errors: 8″

    Erick Souza:

    September 3rd, 2006 at 15:29
    Malva o que aconteceu foi que o sistema do Blog converteu as aspas para um tipo não permitido no Actionscript, seja aspas simples ou duplas, é preciso que sejam retas., veja:

    “[…]This type of quotation mark is not allowed in ActionScript. Please change it to a standard (straight) double quote.[…]”.

    Eu postei novamente o código entre as tags [code] e ele preservou a código, instancie o movieClip de ESouza e copie o código acima novamente.

    Malva:

    September 3rd, 2006 at 18:21
    Legal deu certo agora!!
    Obrigado!!

    Hum ficou muito bom!
    Parabens!
    Mais um favor: De uma olhada no meu site e veja que esta lento, não usei “tween” sera que pode ser isso de o deixa lento? Usei action
    [as]onClipEvent (enterFrame) {
    this._xscale += F=F*0.6+(_root.cX-this._xscale)/(T=10);
    this._yscale += F=F*0.6+(_root.cY-this._yscale)/(T=10);

    }[as]

    Malva:

    September 3rd, 2006 at 18:22
    errei!
    […]onClipEvent (enterFrame) {
    this._xscale += F=F*0.6+(_root.cX-this._xscale)/(T=10);
    this._yscale += F=F*0.6+(_root.cY-this._yscale)/(T=10);

    }[…]

    Erick Souza:

    September 4th, 2006 at 23:37
    Provavelmente Malva, muitos onEnterFrame deixam o filme lento, faz assim, após cada animação finalizar, delete o onEnterFrame. Utilize a instrução delete. Ex: [as]delete instanciaMc.onEnterFrame;[/as]

    Malva:

    September 5th, 2006 at 0:41
    Ola Erick muito obrigado pela atenção, mas essa função coloco no primeiro frame do meu filme?

    Um abraço
    Malva

    cristiane marcilia:

    November 17th, 2006 at 15:32
    olá tenho uma dúvida, com relação à xml no flash, estou tentando carregar um swf dentro de outro swf, só que o swf que esta sendo chamado contém parametros para o xml mas quando chamado não carrega o xml.
    Na verdade é uma galeria de fotos, que chamo as fotos pelo xml, você pode me ajudar?
    Desde já agradeço a atenção.

    Débora:

    June 4th, 2007 at 13:59
    oi eu to com um problema tenho um algoritmo para fazer mais naum sei nem por onde começar .. hauHAUhau
    sera que alguem pode me ajudar??

    Trackback
    Leave a Comment
    Name (required)

    Mail (will not be published) (required)

    Website

    Pages
    Home
    Sua Opinião
    About Me
    Contact
    Meu Perfil
    Contato
    Categories
    Acessibilidade
    Actionscript
    Actionscript 3.0
    Apollo
    Blog
    Classes
    Desenhos Animados
    Experimentos
    Flash
    Flash 9
    Flash CS3
    Flex
    Geral
    PHP / MySQL
    Respostas
    Rich Internet Applications
    Usabilidade
    Vídeos
    Web Standards
    Archives
    March 2007
    February 2007
    January 2007
    December 2006
    November 2006
    October 2006
    September 2006
    August 2006
    June 2006
    May 2006
    April 2006
    February 2006
    January 2006
    FEED
    RSS FEED
    FEED VIA E-MAIL:

    Meta

    ——————————————————————————–

    Copyright 2006. Erick Souza. All rights reserved. | RSS Feed | Login |

  14. Ricardo Says:

    Erick,

    Você não sabe o quanto me ajudou lendo seu blog, muito obrigado mesmo, estou iniciando no flash e estava com um daqueles problemas, q por causa deles muitos iniciantes ja deram um tiro na cabeça, rsrsr, valeu mesmo, já adicionei a favoritos e sempre retornarei, obrigado mesmo!

  15. hydroxycut ephedra Says:

    diet ephedra loss ephedra

  16. Rodrigo Says:

    Cara…blz?

    Cara, não consigo fazer aquele efeito q vc passou la.

    for(i=1; i

  17. Rodrigo Says:

    Cara…blz?

    Cara, não consigo fazer aquele efeito q vc passou la.

    coloco o codigo certo, rodo o swf, ñ da nenhum erro mas tbm ñ acontec nada com o mc.

    o que será q ta acontecendo?

    Abraços

  18. ric Says:

    Ola galera o eu aqui de novo
    Estou aqui hoje para contar uma novidade para vocês.
    GoogleCubo é a novidade da Google para esse verão.
    Esse pessoal da Google não para de inventa, eles vão acabar dominando o mundo.
    A Google agora invento o Google Cubo, finalmente uma boa noticia para pessoas que tem pequenos e médios sites, eles estão cobrando uma pequena taxa para colocar o seu site em primeiro lugar na página do Google, muito bom, adorei, o ruim é que só tem 10 mil vagas.
    Da uma olhada galera.
    http://www.googlecubo.com.br

  19. andre Says:

    velho to com um problema q vc deve resolver em um segundo, mas eu ja to levando dois dias e n consigo… to usando esse codigo:

    for (i=1; i<=15; i++) {
    var moveMc:Tween = new mx.transitions.Tween(_root['slide'+i], ‘_x’, mx.transitions.easing.Regular.easeOut, _root['slide'+i]._x, (i-posatual)*1000, 1, true);
    }

    para mover umas fotos, ele funciona perfeitamente mas quando eu chamo esse slideshow de outro swf atraves de loadmoavie ele n funciona mais:

    _root.mc_vazio.loadMovie(”slide1tween.swf”);

    como q eu resolvo esse problema???

    valeu!!!

  20. Erick Souza Says:

    O problema está no _root, depois que carrega ele em outro swf, o escopo muda, é aconselhável usar caminhos relativos para evitar estes problemas (this, _parent).

Leave a Reply