Fórum de discussão sobre Flash moderados por especialistas.
Os melhores tutoriais de Flash escritos em Português.
Milhares de "open sources" devidamente catalogadas e classificadas.
Centenas de viciantes jogos desenvolvidos em Flash.
Selecção dos melhores websites
em Flash.
Bibliotecas de software, componentes, fontes e sons para Flash.
Artigos técnicos indispensáveis para profissionais em Flash.
Receba todos os dias a newsletter do Flash Web Training com as principais notícias sobre tecnologia e informática.
Curso de Flash 5 e MX com acompanhamento de formadores especializados.
Online Store com
os melhores produtos dedicados ao Flash.
Principais conferências
e eventos sobre Internet e Novas Tecnologias.
Anúncios
de emprego para empresas que procuram profissionais de
Flash.
Caso tenha alguma
dificuldade, contacte o nosso suporte técnico.
Ficha
Técnica
Autor:
Flash Web Training
Versão:
Flash 5
Dificuldade:
Actionscript
Data de
Publicação:
02/10/2002
Introdução
O Flash tem uma série de objectos embutidos, cada um destes objectos
tem definidas as suas propriedades e métodos no seu protótipo"prototype",
mas por vezes podemos ter interesse em criar nos novos métodos
ou até reescrevê-los ou estendê-los. Neste tutorial
vamos ver como fazemos tudo isto, não é muito difícil,
mas é muito útil.
O Flash tem numerosos Objectos Embutidos "Built-in Objects"
como por exemplo, MovieClip, String, Math, Array, Color, e Object. Cada
um tem métodos e propriedades úteis que são definidas
no manual de Actionscript. Mas imagina que querias que todos os Movie
Clips tivessem um método que rodasse 180º na horizontal e
na vertical, algo como bola.flipX (), por outras palavras, que cada Movie
Clip no teu Filme herdasse o método flipX() automaticamente.
Na verdade, isto não é muito difícil. Se souberes
a sintaxe certa podes adicionar o teu método ao "prototype"
do objecto embutido. Por exemplo, isto é como adicionar o método
flipX () à class do Movie Clip:
MovieClip.prototype.flipX = function () {
this._xscale = -this._xscale; };
};
Agora podes rodar qualquer Movie Clip chamando o método assim:
mc.flipX ();
Agora um método flipY () para também poderes rodar 180º
no eixo y:
MovieClip.prototype.flipY = function () {
this._yscale = -this._yscale;
};
Em geral, podes adicionar um método a um objecto embutido através
desta sintaxe:
BuiltinObject.prototype.method = function () {
// codigo
};
(Nota de terminologia: o método MovieClip.flipX () que criámos
não é um "prototype"; é um método
"prototype". A class MovieClip só tem um "prototype",
por isso não podes adicionar um "prototype"
ao MovieClip.)
A seguir um SWF que demonstra os resultados dos métodos flipX ()
e flipY ():
Reescrever Métodos Embutidos "Built-in Methods"
Não só podes adicionar novos métodos aos Objectos
Embutidos "Built-in Objects", como também reescrever
os seus métodos. Por exemplo, Branden Hall do Figleaf escreveu
novos métodos para
o objecto String que são substancialmente mais rápidos
no player do Flash que os existentes por defeito.
Para reescrever um método embutido, só tens que usar a mesma
sintaxe usada para adicionar um método. Por exemplo, o método
Array.push () é bastante lento no Flash 5. Podes reescrevê-lo
com o seguinte código:
Array.prototype.push = function (data) {
this[this.length] = data;
};
O código acima insere dados no fim do array actual. Atenção
que este código é usado para se referir ao objecto em questão,
dentro do método.
Math, Selection, Key e Mouse são objectos estáticos "Static
Objects", ao contrário de outras classes como Array e
Date. Estáticos "Static" significa que são objectos
únicos, só encontras um objecto; não podes os podes
instanciar. Por instanciamento não podes criar mais nenhum objecto
Math.
A extensão de alguns objectos embutidas terá que ser feita
de uma forma um pouco diferente. Objectos estáticos não
têm a propriedade prototype, então, como alternativa tens
que adicionar propriedades e métodos directamente no objecto. Por
exemplo, isto é como poderias escrever a função Math.distance
(), esta função encontra a distância entre dois pontos:
Math.distance = function (x1, y1, x2, y2) {
var dx = x2 - x1;
var dy = y2 - y1;
return Math.sqrt (dx*dx + dy*dy);
};
Em geral, podes usar esta sintaxe para estender objectos estáticos:
StaticObject.method = function () {
// code
};
Nota: não uses esta sintaxe:
StaticObject.__proto__.method = função ()
__proto__ usado neste caso adicionará o método ao Object.prototype
que nós não queremos.
Há vários sites que armazenam colecções de
métodos de prototype: