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