Comunidad de diseño web y desarrollo en internet online

Como inicializar una clase estatica.

Citar            
MensajeEscrito el 13 Jun 2012 07:33 pm
Necesito saber si hay alguna manera de inicializar una clase estática.

La cuestión es asi, estoy haciendo un juego p2p en el que la comunicación de las pcs es por mensajes. Hice una clase estática para poder acceder la de todos lados, pero tengo que primero inicializar la clase para mandarle la conexión.


Código ActionScript :

package
{
   import p2p.Connection;

   public static class MandarMensaje
   {
      public static var conn:Connection;
      
      public static function MandarMensaje()
      {
         
      }
      
      public static function setearConexion(pconn){
         conn=pconn;
      }
      
      public static function nuevoPersonaje (user:String, equipo:int, tipo:int){
         var msg:Object = {type:"nuevoPersonaje"};
         msg.user=user;
         msg.equipo=equipo;
         msg.tipo=tipo;
         conn.postMessage(msg);
      }
      
      public static function aparecePersonaje (user:String, dondeAparece:int){
         var msg:Object = {type:"aparecePersonaje"};
         msg.user=user;
         msg.dondeAparece=dondeAparece;
         conn.postMessage(msg);
      }
      
      public static function muere (user:String){
         var msg:Object = {type:"muere"};
         msg.user=user;
         conn.postMessage(msg);
      }
      
      public static function empiezaMovimiento (user:String, direccion:int){
         var msg:Object = {type:"empiezaMovimiento"};
         msg.user=user;
         msg.direccion=direccion;
         conn.postMessage(msg);
      }
      
      public static function terminaMovimiento (user:String, direccion:int){
         var msg:Object = {type:"terminaMovimiento"};
         msg.user=user;
         msg.direccion=direccion;
         conn.postMessage(msg);
      }
      
      public static function dondeMira (user:String, direccion:int){
         var msg:Object = {type:"dondeMira"};
         msg.user=user;
         msg.direccion=direccion;
         conn.postMessage(msg);
      }
      
      public static function sync (user:String, x:int, y:int){
         var msg:Object = {type:"sync"};
         msg.user=user;
         msg.x=x;
         msg.y=y;
         conn.postMessage(msg);
      }
      
   }
}


Cuando trato desde el Main de hacer MandarMensaje.setearConexion(_conn); me dice en la clase "1012: The static attribute may be used only on definitions inside a class."

Como seria entonces para setear la variable conn?

Por demilp

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Jun 2012 08:12 pm
Tienes un error de concepto. Lo que quieres es un Singleton, que frecuentemente se confunde con clase estatica. Uno de los problemas de querer usr una clase estatica como Singleton (unica instancia accesible desde todos lados) es que no puedes usar propiedades de instancia, como en este caso la conexion. Como es estatica, ninguna propiedad trasciende la ejecucion del propio metodo, y entonces no puedes mantener una referencia a conn.
Mirate Singleton en AS3, eso es lo que necesitas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2012 08:22 pm
Ahora me fijo. Gracias

Por demilp

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Jun 2012 09:09 pm
Lo hice asi, pero cuando la inicio en el main me tira error.
Hago
s.getInstace(_conn);
y me dice que s es null.

Código ActionScript :

package
{
   import p2p.Connection;

   public class Singleton
   {
      private static var _instancia:Singleton=null;
      private var _conn:Connection=null;
      
      public function Singleton(e:SingletonEnforcer)
      {
         
      }
      
      public function getInstace (pconn:Connection=null):Singleton{
         if (_instancia==null){
            _conn=pconn;
            _instancia=new Singleton(new SingletonEnforcer())
         }
         return _instancia;
      }
      

      
      public function nuevoPersonaje (user:String, equipo:int, tipo:int):void{
         var msg:Object = {type:"nuevoPersonaje"};
         msg.user=user;
         msg.equipo=equipo;
         msg.tipo=tipo;
         _conn.postMessage(msg);
      }
      
      public function aparecePersonaje (user:String, dondeAparece:int):void{
         var msg:Object = {type:"aparecePersonaje"};
         msg.user=user;
         msg.dondeAparece=dondeAparece;
         _conn.postMessage(msg);
      }
      
      public function muere (user:String):void{
         var msg:Object = {type:"muere"};
         msg.user=user;
         _conn.postMessage(msg);
      }
      
      public function empiezaMovimiento (user:String, direccion:int):void{
         var msg:Object = {type:"empiezaMovimiento"};
         msg.user=user;
         msg.direccion=direccion;
         _conn.postMessage(msg);
      }
      
      public function terminaMovimiento (user:String, direccion:int):void{
         var msg:Object = {type:"terminaMovimiento"};
         msg.user=user;
         msg.direccion=direccion;
         _conn.postMessage(msg);
      }
      
      public function dondeMira (user:String, direccion:int):void{
         var msg:Object = {type:"dondeMira"};
         msg.user=user;
         msg.direccion=direccion;
         _conn.postMessage(msg);
      }
      
      public function sync (user:String, x:int, y:int):void{
         var msg:Object = {type:"sync"};
         msg.user=user;
         msg.x=x;
         msg.y=y;
         _conn.postMessage(msg);
      }
      
   }
}

class SingletonEnforcer{

}

Por demilp

5 de clabLevel



 

chrome

 

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