
Pessoal, estamos trabalhando em uma nova versão deste blog. Utilizando XHTML e CSS, buscamos oferecer um acesso mais rápido e um design mais limpo. Nosso objetivo é tornar o DES16N um centro de conhecimento sobre Flash, onde vários desenvolvedores e designers possam publicar suas idéias e comentar sobre o que há de mais novo na comunidade. Aguardem! =)
postado por Jonas Galvez em 6:32 PM
for(var i = 0; i < 10; i++) {
this.mc_original.duplicateMovieClip("mc_copia" + i, i);
// ...definição de propriedades do movieclip duplicado
this["mc_copia" + i].onRelease = function() {
trace("Este movieclip deverá mostrar o valor " + i);
};
};
A mensagem que deveria ser exibida apenas pelo último movieclip (mc_copia9) será exibida por todos os movieclips. Isto acontece porque o evento onRelease armazena uma cópia do valor final da variável i internamente. Para evitar isso, a solução mais direta é a seguinte:for(var i = 0; i < 10; i++) {
this.mc_original.duplicateMovieClip("mc_copia" + i, i);
// armazena uma cópia do valor atual de I na
// propriedade VALOR do movieclip
this["mc_copia" + i].valor = i;
this["mc_copia" + i].onRelease = function() {
trace("Este movieclip deverá mostrar o valor " + this.valor);
};
};
Algumas vezes, isto pode ser meio chato, principalmente quando precisamos definir vários parâmetros dinâmicos. Bom, eu criei uma função que facilita o trabalho. É bem simples:
_global.createFunctionCall = function() {
var _obj = arguments.shift();
var _function = arguments.shift();
var _arguments = arguments;
return function() { _function.apply(_obj, _arguments); };
};
Com ela, podemos passar criar uma função auxiliar para chamar uma outra função (método) passando parâmetros. Veja como ficaria o loop anterior usando esta função:
for(var i = 0; i < 10; i++) {
var mc = this.mc_original.duplicateMovieClip("mc_copia" + i, i);
mc.onRelease = createFunctionCall(mc, function(valor) {
trace("Este movieclip deverá mostrar o valor " + valor);
}, i);
};
O primeiro parâmetro da função createFunctionCall é o objeto no qual a função será aplicada. No exemplo, o objeto é o movieclip recém criado. O segundo parâmetro é a função que deverá ser executada. Note que podemos definir parâmetros diretamente na função. A partir do terceiro parâmetro, inserimos os valores que deverão passados como parâmetro.
É basicamente isso. Eu devo dizer que não testei isso o quanto eu deveria ter testado, mas parece estar funcionando. Qualquer dúvida, me enviem um e-mail ou enviem como comentário deste post mesmo.
postado por Jonas Galvez em 6:11 PM