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 


Responder a