AMAURY BENTES (123 pts)

IRAPUAN MARTINEZ (45 pts)

AUTOR DESCONHECIDO (100 pts)

ZECA BALA (45 pts)

ALEXANDRE PORTO (1281 pts)

FLASHGURU (155 pts)

SYDNEY GANHO (60 pts)

DENIS CARAVALHO (85 pts)

ÉMERSON ROCHA (85 pts)

MAURO ROCHA TAVARES (40 pts)

STICKMAN (155 pts)

FÁBIO DUARTE (79 pts)
Treinamento PontoFlash de Flash e ActionScript

Preciso integrar uma animação do Flash numa index criada no Fireworks.

Posso abrir uma janela popup de um projetor (executável)?

Como eu faço para editar gradientes pré definidos?

Como abrir, de um menu em Flash, um HTML em outro frameset?

Como pular um frame que tem uma ação Stop?

Como fazer uma timeline andar mais lenta que outra?

Como fazer um cursor assim que o mouse entra numa área?

Como se faz para colocar um .gif seguindo o mouse?

Quero um botão com duas funções diferentes.

Quero abrir uma janela popup do Flash.

Quero fazer um movieclip seguir o movimento de um outro na vertical.

Como coloco um cronômetro no flash?

Já foi pedido na lista como detectar o plug-in do Flash no cliente e redirecionar a página, até o momento eu só conhecia o código para Nestcape, segue o código geral.

Como coloco uma senha no Flash?
Context Menu - usando o botão direito do mouse

Funções SetInterval e clearInterval no FlashMX.

Load Múltiplos.

Site da banda os Titãs - Avaliação de sites

O "X" do MacOS no PhotoShop

Ilustrando com effects e gradientes no Fireworks

Bate-papo com Dennis Baldwin - FlashCFM.com

Tweening shape (interpolação de forma)

Conceitos de Programação e ActionScript.

Frases randômicas

Flash Communication Server MX - Primeira Parte

Como criar um site totalmente dinâmico em Flash MX
Rotação

TV static

Transportes

Scrollbar easy

DragVariable

Random block

Wireframe

Foguete

Tabela periodica

Spyral draw

Álbum de fotos

Customcursor
HOME | TRUQUES E DICAS
Dicas de Drag. propriedade __proto__ do prototype e herança de classes.
por Jonas Galvez


Pessoal, aqui vai uma dica rápida:

Mouse.hide();
umMovieClip.startDrag(true);
umMovieClip.onMouseMove = updateAfterEvent;

Bem simples, não acham?
É importante ressaltar que nem sempre podemos aplicar este método. Normalmente, isto só é possível entre métodos de um mesmo objeto ou com funções o que independem de objetos (como é o caso da função global updateAfterEvent). Por exemplo:

mySound = new Sound();
myMovieClip.onRelease = mySound.start; // não funcionará

// mas...

mySound = new Sound();
mySound.onLoad = mySound.start; // funcionará!

No primeiro caso, alocamos uma cópia do método start do objeto Sound no callback onRelease de um objeto MovieClip. Como este método start atua apenas em uma instância da classe Sound, nada acontecerá. No segundo caso, alocamos uma cópia do método start em um callback do próprio objeto Sound, e o método start é então executado com sucesso.

--------------------------
resposta
--------------------------

Mas você pode também utilizar a propriedade __proto__ do prototype para fazer isso:

_global.Neto = function(){
this.nome = "Joao Neto";
}

Neto.prototype.mostraNome = function(){
trace( this.nome );
}

var teste = new Neto();

MovieClip.prototype.__proto__ = teste;

teste.nome = "Neto";

_root.onMouseDown = teste.mostraNome
--------------------------
resposta
--------------------------

Bom, o seu método de herança de classes é um tanto incomum e pode gerar alguns problemas com herança de múltiplos níveis. É uma possibilidade, de fato, mas eu não recomendo. Só devemos criar subclasses quando elas são realmente necessárias. Criar uma subclasse apenas para compartilhar métodos entre classes é uma prática totalmente desnecessária. O ideal é simplesmente criar uma função para executar aquele método:

mySound = new Sound();
myMovieClip.onRelease = function() { mySound.start(); };

Se quiser algo mais sofisticado (mas totalmente inútil), pode usar o callback não documentado __resolve, sobre o qual já comentei dias atrás nesta lista. Veja um exemplo:

myMovieClip.__resolve = function(p) {
var m, objeto = (m = p.split("_"))[0];
return function() { this[objeto][m[1]](); };
};
myMovieClip.mySound = new Sound();
myMovieClip.onRelease = myMovieClip.mySound_start;

Não testei a solução, mas acho que funcionará. Se alguém quiser aprender mais sobre OOP (incluindo a propriedade
__proto__), dê uma olhada nestes links:

http://groups.google.com/groups?selm=aua429$5p4$1@forums.macromedia.com
http://groups.google.com/groups?selm=aua468$5tb$1@forums.macromedia.com

Boa conversa, vamos continuar! =)
--------------------------
resposta
--------------------------
Com certeza o ideal é utilizar uma função para executar o método, mas pode ser interessante saber outras formas de fazer o mesmo =)

_global.Neto = function(){}

Neto.prototype.mostraNome = function(){
trace( "Meu nome é " + this.nome );
}

MovieClip.prototype.__proto__ = Neto.prototype;

_root.nome = "João Neto";
_root.onMouseDown = _root.mostraNome;
--------------------------
resposta
--------------------------
Claro, sem dúvida. Vou apenas esclarecer um pouco o funcionamento do script, para quem mais estiver acompanhando esta thread. Neto é uma classe simples que contém um método chamado mostraNome. No exemplo, o Neto (a pessoa, não a classe) definiu uma relação entre as classes MovieClip e Neto (a classe, não a pessoa). No caso, a classe MovieClip herdará todos os métodos da classe Neto, ou seja, o método mostraNome estará disponível para todos movieclips. Seria praticamente o mesmo que fazer:

for(var metodo in Neto.prototype) {
MovieClip.prototype[metodo] = Neto.prototype[metodo];
};

A diferença é que através da propriedade __proto__ podemos definir uma verdadeira conexão entre as classes. MovieClip.prototype não precisa ter realmente uma cópia individual do metodo mostraNome. Basta que exista uma relação entre as classes para que os movieclips possam term acesso àquele método. E volto a dizer, quem tiver interesse em aprender mais sobre o assunto, dê uma olhada nestes link:

http://groups.google.com/groups?selm=aua429$5p4$1@forums.macromedia.com
http://groups.google.com/groups?selm=aua468$5tb$1@forums.macromedia.com
Como eu já comentei anteriormente, é uma explicação bastante superficial. Mas acho que pode ajudar a entender estes conceitos mais facilmente.

--------------------------
resposta
--------------------------
Isso me faz pensar numa questão interessante: haveria alguma forma de implementar herança múltipla em ActionScript?

Algo como a seguinte declaração de uma classe python:

class DerivedClassName(BaseClass1, BaseClass2, BaseClass3):

Onde no construtor da classe pode ser indicado as classes cujos métodos e propriedades são herdados...
--------------------------
resposta
--------------------------
Bom, usando a sua idéia fiz o seguinte:

Object.prototype.derivedClassName = function(){
for ( var i = arguments.length ; i > 0 ; i-- ){
arguments[ i - 1 ].prototype.__proto__ = arguments[ i ].prototype;
arguments[ i - 1 ].prototype.__constructor__ = arguments[ i ];
}
}

_global.Classe1 = function(){}
_global.Classe2 = function(){}

Classe1.prototype.getName = function(){
return( this.name );
}

Classe2.prototype.setName = function( newName ){
this.name = newName;
}

derivedClassName( MovieClip , Classe1 , Classe2 );

_root.setName( "Joao Neto" );
trace( _root.getName() ); //Joao Neto
--------------------------
resposta
--------------------------
interessante, João, mas nesse caso funciona pois está sendo feita a ligação da Classe2 com a Classe1 e esta por sua vez com a MovieClip.

Mas e quanto a algo do tipo:

_global.ClasseStringMath = function(){}
derivedClassName( ClasseNumberMathString , Number , Math, String );

Ou seja, fazer uma classe híbrida, para que eu não sei... :-), mas que tivesse acesso aos métodos e propriedades tanto da classe Math quanto da Number e da String... mas sem que exista relação entre estas três classes isoladamente.

Obviamente não funcionaria... :-(
--------------------------
resposta
--------------------------
O ActionScript é uma linguagem prototype-based, e não class-based como o Python. Portanto, a única forma de definir herança é usando múltiplos níveis. De qualquer forma, eu criei um método para que possamos obter um comportamento parecido. Funciona, mas não recomendo seu uso.

// propriedade Function.__super__ v1.0
// por Jonas Galvez (jonas@onrelease.org)
Function.prototype.addProperty("__super__",
function() {
return this.$__super__;
},
function(f) {
if(!this.$__super__) {
this.$__super__ = [];
};
for(var p in f.prototype) {
this.prototype[p] = f.prototype[p];
};
this.$__super__.push(f);
ASSetPropFlags(this, "$__super__", 1);
}
);
// método Function.extendsMultiple v1.0
// por Jonas Galvez (jonas@onrelease.org)
Function.prototype.extendsMultiple = function() {
for(var i = arguments.length; i--;) {
if(arguments[i] instanceof Function) {
this.__super__ = arguments[i];
};
};
};
ASSetPropFlags(Function.prototype, "__super__", 1);
ASSetPropFlags(Function.prototype, "extendsMultiple", 1);

_global.Classe = function() {};
_global.ClasseA = function() {};
_global.ClasseB = function() {};

ClasseA.prototype.getString = function() { return this._string; };
ClasseB.prototype.setString = function(str) { this._string = str; };

Classe.extendsMultiple(ClasseA, ClasseB);

trace(Classe.prototype.getString); // [type Function]
trace(Classe.prototype.setString); // [type Function]

var instancia = new Classe();
instancia.setString("Jonas Galvez");
trace(instancia.getString());

Acho que você entenderá o funcionamento. Mas não hesite em perguntar se tiver qualquer dúvida.

Jonas Galvez, Dorneles Treméa e João Neto

0 comentário