Comunidad de diseño web y desarrollo en internet online

manejar clase mejor

Citar            
MensajeEscrito el 31 May 2006 04:36 pm
¿Como hago para darle a esta clase la misma funcionalidad sin tener que hacer un new Character inutil en el .fla?

Código :

import Trig;
import flash.geom.Point;
class Character extends MovieClip {
   function Character() {
      //Obtenemos las coordenadas del MC como un punto
      MovieClip.prototype.getCoords = function():Point  {
         var pnt:Point = new Point(this._x, this._y);
         return pnt;
      };
      //Damos al MC las coordenadas del punto especificado
      MovieClip.prototype.setCoords = function(pnt:Point):Void  {
         this._x = pnt.x;
         this._y = pnt.y;
      };
      //hallamos la rotación del clip, en radianes.
      MovieClip.prototype.getRadsRotation = function():Number  {
         return this._rotation*Trig.degR;
      };
      //le damos al clip una rotación en radianes.
      MovieClip.prototype.setRadsRotation = function(rads:Number):Void  {
         this._rotation = rads/Trig.degR;
      };
      //
      MovieClip.prototype.getMouseCoords = function():Point  {
         var mPoint:Point = new Point(this._parent._xmouse, this._parent._ymouse);
         var dif:Point = mPoint.subtract(this.getCoords());
         return dif;
      };
   }
}

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 31 May 2006 05:03 pm
busca sobre static en la ayuda de flash ;)

si no resuelves avisame y te doy un ejemplo.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 31 May 2006 05:12 pm
Ya probé von static, pero no sé como ponerlo de manera que en el fla no tenga más que poner el import, de hecho da un error algo extraño:

Código :

static function MovieClip.prototype.getCoords():Point  {
         var pnt:Point = new Point(this._x, this._y);
         return pnt;
      };
/*Error: **Error** D:\datos\backup\hari\películas\tuto\Character.as: Línea 6: Se espera '('
           static function MovieClip.prototype.getCoords():Point  {*/

Saludos y gracias. :)

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 31 May 2006 05:15 pm
Es facil, supongo que la idea es extender esa clase para un MovieClip especifico. Bueno primero que todo modificaria como tienes la clase de la siguiente forma;

Código :

//import Trig;
import flash.geom.Point;
class Character extends MovieClip {
   function Character() {
   }
   //Obtenemos las coordenadas del MC como un punto
   function getCoords():Point {
      var pnt:Point = new Point(this._x, this._y);
      return pnt;
   }
   //Damos al MC las coordenadas del punto especificado
   function setCoords(pnt:Point):Void {
      this._x = pnt.x;
      this._y = pnt.y;
   }
   //hallamos la rotación del clip, en radianes.
   function getRadsRotation ():Number  {
            return this._rotation*Trig.degR;
    };
   //le damos al clip una rotación en radianes.
   function setRadsRotation (rads:Number):Void  {
            this._rotation = rads/Trig.degR;
    };
   //
   function getMouseCoords():Point {
      var mPoint:Point = new Point(this._parent._xmouse, this._parent._ymouse);
      var dif:Point = mPoint.subtract(this.getCoords());
      return dif;
   }
}


Nota que saque los prototype para que la realmente tu clase afecte a la que estas modificando. Ahora esta listo.

El siguiente paso es que crees el movie clip al cual le quieres asignar esta clase. Lo seleccionas en la biblioteca y ves sus propiedades. Lo preparas para uso en forma doinamica (linkage o exportar para action script) y con eso se activa la casilla en donde se puede asignar una clase 2.0. Ahi pones el nombre de tu clase "Character" y estaria listo. espero que hayas entendido. Si no es asi pregunta no mas.

El ejemplo en http://rolivares.no-ip.org/ej_class.rar

Por colaborame

50 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 31 May 2006 05:22 pm
Nah, así es como lo tenía antes, pero quiero evitar que todos los clips de la biblioteca tengan que extender a Character.

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 31 May 2006 05:50 pm
ok no, prototype es de actionscript 1, no lo necesitas ;)

lo que tu quieres es construir una clase abstracta, que es una clase abstracta, bueno que solo tiene propiedades y metodos estaticos (que son static), la clase Math es un buen ejemplo de ella

Código :

class MyAbstractClass{
   static public var propAbstract:Number =10;
   static public function MyMethodAbstract (){
      return "Call to MyMethodAbstract";
   }
}

Código :

import MyAbstractClass;
trace(MyAbstractClass.MyMethodAbstract());


Ahora las clases abstracta(metodos abstractos) no pueden hacer referenciar a instancias, por lo que no podras usar this, _parent, etc., asi que la herencia de MovieClip no te servirá, pues necesitas un instancia de movieclip para poder hacer la herencia.

Bueno para heredar la clase MovieClip es como te dice colaborame

colaborame escribió:

lo preparas para uso en forma doinamica (linkage o exportar para action script) y con eso se activa la casilla en donde se puede asignar una clase 2.0. Ahi pones el nombre de tu clase "Character" y estaria listo. espero que hayas entendido. Si no es asi pregunta no mas.


luego de eso solo arrastras tu mc al escenario o haces el tipico attachMovie, con ese nombre de instancia podras utilizar los metodos de tu clase, repito no puede ser abstracta.

Código :

attachMovie("Linkage Name","newMc",1 );
newMc.getRadsRotation();


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 31 May 2006 05:55 pm

zah escribió:

Nah, así es como lo tenía antes, pero quiero evitar que todos los clips de la biblioteca tengan que extender a Character.

¿Entonces deduzco que así no se puede hacer?

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 31 May 2006 06:01 pm
para extender la clase movieclip debes crear una instancia, asi que no, no se puede hacer.

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 31 May 2006 06:44 pm
en realidad si se podría

pones los codigos que tenias en el primer frame de tu pelicula y eso extiende por defecto todos las nuevas instancias de MovieClip que crees de ahi en adelante.

Código :

MovieClip.prototype.setCoords = function(pnt:Point):Void  {
         this._x = pnt.x;
         this._y = pnt.y;
};

MovieClip.prototype.getCoords = function():Point  {
         var pnt:Point = new Point(this._x, this._y);
         return pnt;
      };

Por colaborame

50 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 04 Jun 2006 03:38 am
Bueno zah aqui te doy una solución sin linkear los mc´s de la biblioteca:

Character.as

Código :

class Character extends MovieClip{
   static var symbolName:String = "__Packages.Character";
   static var symbolOwner:Function = Character;
   static var symbolLinked = Object.registerClass(symbolName, symbolOwner);
   static function __resolve(name){
      return Character[name];
   }
   public function drawShape(w:Number, h:Number){
      beginFill(0x000000,100);
      lineTo(0,h);
        lineTo(w,h);
        lineTo(w,0);      
      endFill();
   }
   public function getCoords(){
      return [this._x, this._y]
   }
}


uso:

Código :


import Character;

attachMovie(Character.symbolName,"character",getNextHighestDepth());

character._x=400;
character._y=100;

character.drawShape(100,100);
trace(character.getCoords());


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 25 Jun 2006 09:43 pm
Hola Maikel, cierto qe no lo había leído, y aunque planteé dos preguntas distintas, creo que responde a las dos. El problema es que no entiendo las primeas líneas del código (y salvo la función __resolve, la ayuda de flash no me aclara nada). ¿Sería mucho pedir una explicación línea por línea?

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 02 Jul 2006 02:55 am
Lo que hago alli es registrar[crear] la clase Character con el path interno ("__Packages") que usa el compilador de flash y su constructor (symbolOwner) y asi logro heredar a la clase MovieClip , el __resolve es para crear metodos y/o propiedades dinamicos.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.