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 );

27 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. 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!

  14. hydroxycut ephedra Says:

    diet ephedra loss ephedra

  15. Rodrigo Says:

    Cara…blz?

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

    for(i=1; i

  16. 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

  17. 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

  18. 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!!!

  19. 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).

  20. mariana Says:

    Erick vc poderia me ajudar a fazer um programa que leia essa serie de 100 valores: 1,3,6,10,15…
    e tambem o programa que leia o número inteiro positivo e calcule o fatorial de até 12 valores
    s=1!/1 -2!/3 + 3!/7- 4!/15 + 5!/31 - 6!/63 +… ?

    se puder me ajudar agradeceria…

    beijos

  21. mariana Says:

    oi erick sou eu de novo será q poderia me ajudar?

    não estou conseguindo fazer!!!

    beijos e obrigada

  22. Erick Souza Says:

    Oi Mariana, onde você está tendo problemas?

  23. mariana Says:

    eu consiguo dar o valor dos fatoriais, só ñ consigo somar eles e nem mostrar essa sequencia…poderia me ajudar?

    o primeiro programa eu já consegui fazer, falta só o segundo, do fatorial.

  24. mariana Says:

    tenho q entregar amanhã!!!

    Me ajuda!

    beijos e obrigada!

  25. mariana Says:

    a estrutura de repetição usada é a For…

  26. mariana Says:

    Erick, me ajuda por favor, já estou nervosa por ñ estar conseguindo…

  27. Lorelai Says:

    gente, to fazendo estrutura de repeticao, em algoritmo, alguem poderia me ajudar, porque preciso criar um programa usando visual studio com linguagem c# . bom, quem puder tambem, sei la, me enviar um tutorial sobre C# eu ficaria muito feliz! beijos beijos

Leave a Reply