2008
10.06

No AS2, quando precisamos chamar movieClips sequenciais ou o nome do movieClip vem numa string, como quando vem num XML, usamos o modelo level["mcName"]. No AS3 isso não existe, mesmo os movieClips da biblioteca têm de ser instanciados, não existe mais o “attachMovie” e o universo OOP não permite que uma classe seja instanciada com uma string (pelo menos teóricamente).

    Mas há uma saída, a função getDefinitionByName(), e não é a toa que está no pacote flash.utils, há várias utilidades pra essa função.

    Bom, se você está lendo esse artigo, acredito que esteja quebrando a cabeça procurando essa solução, e não precisa que eu diga pra quê ela será útil. De qualquer forma, segue um exemplo simples de uso, que servirá como parâmetro da sintaxe também:

    • Crie um arquivo .fla e coloque na biblioteca dele 3 itens, com “linkage names” quadrado1, quadrado2 e quadrado3;
    • Agora crie uma classe GetDefinitionExample;
    • Entre no “Publish Settings” do arquivo FLA e coloque o nome da classe como “Document Class”;
    • Insira o código a seguir no arquivo da classe:


    package
    {
    import flash.display.MovieClip;
    import flash.utils.getDefinitionByName;
    /**
    * ...
    * @author LeandroPalomo
    */
    public class GetDefinitionExample extends MovieClip
    {
    public function GetDefinitionExample()
    {
    for (var i:int = 1; i <= 3; i++ )
    {
    var quadradoDaVez:Object = getDefinitionByName("quadrado" + String(i));
    var quadrado = new quadradoDaVez();
    quadrado.x = quadrado.width * i;
    quadrado.y = quadrado.height * i;
    addChild(quadrado);
    }
    }
    }
    }

    • Exporte o arquivo e, se tudo der certo, os três quadrados devem ser instanciados e adicionados ao stage.

    Ficamos por aqui. Bons testes e estudos, espero ter ajudado!!

    Os arquivos usados neste exemplo estão aqui.

    No Comment.

    Add Your Comment

    You must be logged in to post a comment.