El problema basicamente es que cuando asignas los eventos al clip creado con
attachMovie lo estas haciendo a eso, a un movieclip normal, este no hereda
de FrameServer y por tanto no puedes usar los metodos de heredados. Para que
te funcione, el clip de la biblioteca lo tienes que relacionar con la clase
'prueba' mediante registerClass. No hay otra manera.

Para el resto, os pongo en contexto. La clase FrameServer es una clase
abstracta (no esta dise�ada para instanciar directamente) que escribi para
el curso de OOP y su funcion basica es que al heredar de ella tengas la
posibilidad de meter varios metodos en un onEnterFrame mediante los metodos
addFrameLoop("metodo") y removeFrameLoop("metodo"). Se podria mejorar,
seguro, pero tambien era necesaria mantenerla dentro de una relativa
sencillez. En la practica yo usaria alguna tecnica de mixin para
implementar esa funcionalidad en vez de una clase abstracta pero eso es otra
historia. Os planto un ejemplo de su uso (AS1):

<code>

#initclip 1
function Prueba(){
    this.animar();
}
Prueba.prototype = new FrameServer();
Prueba.prototype.animar = function(){
    this.addFrameLoop("mover");
    this.addFrameLoop("rotar");
}
Prueba.prototype.mover = function(){
    this._x+=1;
}
Prueba.prototype.rotar = function(){
    this._rotation+=1;
}
Object.registerClass("simbolo",Prueba);
#endinitclip 1

</code>

un saludo

Joseba Alonso
www.sidedev.net
www.5dms.com


----- Original Message ----- 
From: "Manu Alvarez" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, February 05, 2004 11:50 AM
Subject: [ASNativos] Clases abstractas


> Untitled DocumentHola a [EMAIL PROTECTED]:
>
> Estoy haciendo una clasecilla para tener controlados todos los eventos
> onEnterFrame que pueda tener desperdigados por ah�, y b�sicamente  se
> compone de 3 m�todos, 2 p�blicos y uno privado: (y s�, ya lo se, es as1.
> cuando me rule lo paso a as2)
>
> function FrameServer() {
>  this.metodos = new Array(); // aqu� se almacenan los nombres de los
m�todos
> que se quieran ejecutar
> }
> FrameServer.prototype = new MovieClip(); // extendemos
> FrameServer.prototype.addFrameLoop = function(metodo) { // a�adimos un
nuevo
> m�todo y ejecutamos el onEnterFrame
>  this.metodos.push(metodo);
>  if (this.metodos.length!=0){
>   this.onEnterFrame = this.__FrameLoop;
>  }
> };
> FrameServer.prototype.removeFrameLoop = function(metodo) { // para borrar
un
> metodo en ejecucion
>  for (var i = 0; i<this.metodos.length; i++) {
>   if (this.metodos[i] == metodo) {
>    this.metodos.splice(1, i);
>   }
>  }
> if (this.metodos.length == 0) {
>   delete this.onEnterFrame;
>  }
> };
> FrameServer.prototype.__FrameLoop = function() {
>  for (var i = 0; i<this.metodos.length; i++) {
>   this.metodos[i](); // ejecutamos los m�todos que esten en el array
>  }
> };
>
> --------------------------------------------------------------------------
-
>
> Luego el uso ser�a sencillo, por ejemplo:
> function prueba() {
>  this.init();
>  super();
> }
> prueba.prototype = new FrameServer();
> prueba.prototype.init = function() {
>  var mc = _root.attachMovie("testSymbol", "testmc", 100); // para pruebas,
> luego pongo el registerclass
>  mc.onRollOver = this.resaltar;
>  mc.onRollOut = this.restaurar;
> };
> prueba.prototype.resaltar = function() {
>  this.addFrameLoop("bucle");
> };
> prueba.prototype.restaurar = function() {
>  this.removeFrameLoop("bucle");
> };
> prueba.prototype.bucle = function() {
>  trace("pulsando");
> };
>
> Pero l�gicamente no me va :(
> Joseba, refr�scame las ideas plis ;)
>
>
>
> <!-------------------------------
> Lista ASNativos:
> subscripciones/desubscripciones
> http://www.sidedev.net/asnativos
> -------------------------------->

<!-------------------------------
Lista ASNativos:
subscripciones/desubscripciones
http://www.sidedev.net/asnativos
-------------------------------->

Responder a