jelou...
tras a�os de volverme loco con el tema, POR FIN he entendido
c�mo funciona esto de la herencia en Flash...
asi que, presa de la alegr�a que me invade, me dispongo a
compartir con todos lo que he aprendido, con la intenci�n de
que alguien se ahorre los dolores de cabeza que he sufrido :)
se supone que es AS avanzado, asi que a los novatos les insto
a que se salten este mail si no quieren acabar mal de la cabeza :)
nota: en la lista [FlashCoders] hay guerra encendida sobre
cual es la mejor manera de crear herencia en ActionScript,
pero yo no le encuentro problemas a esta que cuento...
aqui va la cosa:
HERENCIA EN FLASH
por [EMAIL PROTECTED] con la inestimable ayuda de Dave Yang,
Tatsuo, Branden Hall, Robert Penner, //klas, Moock, y todos los que
me han echado broncas por preguntar burradas :)
1) �QUE ES HERENCIA?
En OOP, llamamos herencia a un mecanismo por el cual las clases
"heredan" m�todos y propiedades de una clase superior llamada,
en un derroche de imaginaci�n, "super"
2) �PARA QUE SIRVE?
Pongamos por caso que estamos programando un juego. Tenemos una
clase con m�todos para el movimiento. Luego tenemos en pantalla
una nave, 8 alien�genas, 14 asteroides y 4 c�psulas de bonus.
�Tenemos que poner m�todos de movimiento en todos?
No...
Digamos que si tuviera una clase llamada "movimiento", con m�todos
de movimiento, si de alguna manera pudiera hacer que mi nave, mis
alien�genas, mis asteroides y mis c�psulas pudieran usar esas clases
me ahorraria todo el trabajo...
3) �COMO FUNCIONA?
Esto es tan facil que casi da miedo (y me da verguenza reconocer lo
que he tardado en darme cuenta de c�mo es esto...)
Crearemos un m�todo general para todos los objetos, que sirva para
heredar de una clase superior:
Object.prototype.implements = function(c, args) {
this.super = c;
this.super(args);
delete this.super;
this.__proto__ = c.prototype;
}
Simple, �no? :)
4) EJEMPLO A
function A(){
this.propA = "A";
}
function B(){
this.implements(A);
this.propB = "B";
}
function C(){
this.implements(B);
this.propC = "C";
}
myC = new C();
trace(myC.propA); // "A"
trace(myC.propB); // "B"
trace(myC.propC); // "C"
5) EJEMPLO B (Un poco mas complejo :)
function movimiento(velocidad){
this.velocidad = velocidad;
this.arriba = function(){
this._y -= this.velocidad;
}
this.abajo = function(){
this._y += this.velocidad;
}
this.izquierda = function(){
this._x -= this.velocidad;
}
this.derecha = function(){
this._x += this.velocidad;
}
}
function asteroide(tama�o,velocidad){
this.implements(movimiento,velocidad);
this.tama�o = tama�o;
}
function nave(color,velocidad){
this.implements(movimiento,velocidad);
this.color = color;
}
function alienigena(velocidad){
this.implements(movimiento,velocidad);
this.bichoFeoYMalo = true;
}
miNave = new nave("azul",100);
miAlienigena = new alienigena(90);
miAsteroide = new asteroide(100,25);
miNave, miAlienigena y miAsteroide tienen ahora los m�todos
arriba(), abajo(), izquierda() y derecha()
y en fin, a mi me ha venido de co�a en un proyecto, supongo que alguien
le sacar� m�s provecho que yo :)
[EMAIL PROTECTED] | bomber-studios.com | see less, think more