Comunidad de diseño web y desarrollo en internet online

Crear una clase que herede de EventDispatcher con x e y

Citar            
MensajeEscrito el 04 Jun 2009 08:30 pm
Wenas

Estoy haciendo un pequeño juego en PV3D y me he dado cuenta de que todas las clases de PV3D, al final heredan siempre de eventdispatcher.

Supongo que esto lo hacen porque asi se evitan heredar variables y funciones que no van a utilizar. Supongo que lo hacen para liberar al procesador y memoria de carga inutil (puesto que son cosas que no van a utilizar).

La cuestion es que tambien estoy haciendo un juego de pixels, y quiero tener en pantalla el mayor numero posible de pixels, para ello, supongo que una buena optimizacion seria en vez de heredar Pixel de MovieClip, heredar de EventDispatcher y añadirle solo lo que necesito (como hacen las clases de PV3D).

Basicamente lo unico que necesito es:
las funciones:
addEventListener
removeEventListener
dispatchEvent
y las variables:
graphic
x
y

Las funciones estaban incluidas en eventDispatcher, y la variable graphic, tambien era bastante facil. Asi que solo me falta por añadir las variables x e y, pero no tengo ni idea de como hacerlo y mirando como lo han hecho los de PV3d no me aclara nada pq crean una clase llamada Matrix3D que aparentemente solo opera con matrices.

Alguien sabe como puedo crear variables x e y, y que al asignarles un valor, me mueva el pixel que quiero a la posicion deseada sin tener que añadir la heredar de la clase DisplayObject???

Gracias

Por X-TUS

94 de clabLevel



 

chrome
Citar            
MensajeEscrito el 05 Jun 2009 06:27 am
X-Tus, si quieres que "algo" se muestre DEBE ser un DisplayObject -tienes que ser capaz de hacer un addChild sobre él-
Papervision no hace que todos hereden de eventDispatcher, es que un DisplayObject hereda
DisplayObject ---> EventDispatcher ----> Object
Si necesitas la "propiedad" graphics, tienes que usar al menos un objeto de la clase Shape o de la clase Sprite:
Shape --->DisplayObject --->EventDispatcher --->Object
Sprite --->DisplayObjectContainer --->InteractiveObject --->DisplayObject --->EventDispatcher --->Object

NOTA:En la ayuda de Flash podemos ver de qué se hereda o de qué clase DEBE ser nuestro objeto para que tenga determinadas propiedades

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Jun 2009 08:18 am
Pero por ejemplo podria crear un eventDispatcher y anadirle la siguiente variable:

var graphics:flash.display.Graphics;

Por X-TUS

94 de clabLevel



 

chrome
Citar            
MensajeEscrito el 05 Jun 2009 08:51 am
Está mal expresada la pregunta o yo estoy corto de entendederas :(

NO se puede añadir a un objeto de la Clase EventDispatcher una variable porque es una clase sellada(*)
Sí puedes crearte una clase que extienda de la Clase EventDispatcher y añadirle las variables que quieras y del tipo que quieras, pero me temo que para que puedas ver algo en pantalla debes tener un DisplayObject.

Lo mismo no me estoy enterando y lo que quieres hacer es tener una clase que no extiende de DisplayObject pero tiene un método tal y como

Código ActionScript :

mostrarPunto(){
    var shape:Shape=new Shape()
    shape.x=this.x  //<--el "this" NO es necesario, lo pongo por claridad
    shape.y=this.x
    shape.graphics=this.graphics
    _stage.addChild(shape) //<---he imaginado que guargamos en una variable la película principal
}

Al que llamas en alguna ocasión, pero ya te digo que ando "espeso" esta mañana.

(*)El motivo "tecnico" es que en AS3 todas las clases (salvo la Clase MovieClip) son selladas. Vamos, en AS3 tenemos clases "dynamic" (dinámicas) y "sealed" (selladas"). Una Clase dinámica permite añadirle variables tan ricamente, Así

Código ActionScript :

var mc:MovieClip = new MovieClip();
mc.propiedad1 = "texto"; //Esto es OK
//pero
var sp:Sprite = new Sprite();
sp.propiedad1 = "texto";  //esto da ERROR

(ver a Llops que lo explica mejor que yo)

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Jun 2009 07:03 pm
Yo queria hacer algo asi:

Código ActionScript :

package pixel {
   import flash.events.EventDispatcher;
   
   public class algo extends EventDispatcher {
      private var graphics:flash.display.Graphics;
      
      public var x:Number;//Hacer getter y setter como con _y
      private var _y:Number;
      
      public function algo() {
         //dibujar algo con graphics
      }
      
      public function get y():Number { return _y; }
      public function set y(value:Number):void {
         _y = value;
         //implementar el cambio de la posicion _y aqui
      }
   }
}

Pero ya he visto que no se puede

Por X-TUS

94 de clabLevel



 

chrome

 

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