Foros del Web » Creando para Internet » Flash y Actionscript »

[as3]

Estas en el tema de [as3] en el foro de Flash y Actionscript en Foros del Web. Hola, a ver si alguien que use AS3 me puede ayudar porque esto es bastante importante y no encuentro la forma de hacerlo. Bien yo ...
  #1 (permalink)  
Antiguo 09/10/2007, 05:43
 
Fecha de Ingreso: febrero-2007
Mensajes: 111
Antigüedad: 17 años, 9 meses
Puntos: 0
[as3]

Hola, a ver si alguien que use AS3 me puede ayudar porque esto es bastante importante y no encuentro la forma de hacerlo.

Bien yo tengo en mi flash:

Código:
var opera:Operador = new Operador();
if(opera.existe()){

   entrar();

}
Podeis observar que mi objeto opera llama al método existe(). Este método comprueba la existencia del operador donde estos están registrados y devuelve verdadero o falso. Pero claro, cuando opera.existe() devuelve este resultado el if se ha terminado mucho antes. ¿Cómo puedo hacer esto efectivo, de tal forma que el if lea lo que devuelve opera.existe() ? Muy agradecido al que pueda ayudarme.
  #2 (permalink)  
Antiguo 09/10/2007, 08:20
Avatar de SinguerInc  
Fecha de Ingreso: octubre-2007
Ubicación: Barcelona, España
Mensajes: 551
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: [as3]

La primera cosa que deberia saber es donde comprueba si existe o no. La info la tienes en un db mysql?, en sqlite?, en un xml?, es importante, igualmente mas o menos es igual para todos:

por ejemplo, si estas tomando los datos de mysql tramite una pagina php que te genera un xml:
Código:
		import flash.net.URLRequest;
		import flash.net.URLLoader;
		import flash.events.Event;
		
			var opera:Operador = new Operador();

			function verificarExistenciaOperador():void
			{
				var _urlR:URLRequest = new URLRequest("isOperadorInDB.php");
				var _urlL:URLLoader = new URLLoader();
				_urlL.load(_urlR);
				_urlL.addEventListener(Event.COMPLETE, onVerifOperador);
			

			
			}
			
				function onVerifOperador(event:Event):void
				{
					var myXml = new XML(event.target.data);
					if(myXml.isOperadorValido == "true")
					{
						entrar();
					}
				}
				
			verificarExistenciaOperador();
Lo que haces es registrar un "listener" para saber cuando esa informacion esta cargada, y ahi recien realizas la comprobacion y entras.
  #3 (permalink)  
Antiguo 09/10/2007, 08:50
 
Fecha de Ingreso: febrero-2007
Mensajes: 111
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: [as3]

Gracias por tu respuesta SinguerInc, efectivamente lee de una DB Mysql. Y realmente lo que hago es eso que haces tu. Solo que en mi caso el código no está en el flash si no en la clase Operador que la llamo desde el flash. Aquí esta el problema, yo lo que quiero es no tener que poner este codigo en el flash, no se si me explico, mira el codigo:

Código:
public function existe():void{
		
		var loader:URLLoader = new URLLoader();
		loader.addEventListener(Event.COMPLETE, eventoExiste);
		var url:String = this.__path + "loginoperador.php?nocache=" +  new              Date().getTime();
        var request:URLRequest = new URLRequest(url);
        var variables:URLVariables = new URLVariables();
		
		variables.usuario = this.__usuario;
		variables.password = this.__password;
		
		request.data = variables;
		request.method = "POST";
		loader.load(request);
		
		
		function eventoExiste(event:Event):void{    
			var  variables:URLVariables = new URLVariables(event.target.data);
			
			trace(variables.encontrado);
			
			
			
		}
		
		
	}
Otro problema es devolver encontrado en la ultima funcion ya que se haría el return pero es que desde flash llamamos a existe no a eventoExiste. Madre mía que follon.
  #4 (permalink)  
Antiguo 09/10/2007, 08:58
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 20 años, 4 meses
Puntos: 12
Re: [as3]

Si la función retorna un valor booleano (mediante return), no debería haber problema:
En el .as:
Código:
package {
	public class Ejemplo {
		public function Ejemplo() {
			
		}
		public function existe():Boolean {
			var existe:Boolean = true;
			return existe;
		}
	}
}
En el .fla:
Código:
var prueba:Prueba = new Prueba();
var existe:Boolean = prueba.existe();
trace(existe); //output: true.
  #5 (permalink)  
Antiguo 09/10/2007, 09:10
 
Fecha de Ingreso: febrero-2007
Mensajes: 111
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: [as3]

Gracias Mahalo por tu respuesta.

Lo que tu planteas es bastante mas sencillo de lo que es en realidad. En el fla llamamos a existe pero en el .as no es "existe" la función que posee el return sino la función del evento que ocurre en "existe" cuando se completa la acción de recuperar el sí o el no, como bien se ve en el fragmento de código de mi anterior respuesta. Esto que quiere decir: que yo llamo a una función pero no es ella la que hace el return es una funcion interna de ella o derivada como queramos decirlo.
  #6 (permalink)  
Antiguo 09/10/2007, 10:28
Avatar de SinguerInc  
Fecha de Ingreso: octubre-2007
Ubicación: Barcelona, España
Mensajes: 551
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: [as3]

Jeje, te has complicado la vida...pero despues de 30 min llegue a hacerlo funcionar!!

en tu .fla o flex:

Código:
			private var operador:Operador;
			
			private function init():void
			{
				operador = new Operador();
				operador.existe.addEventListener(Event.COMPLETE, onOperadorInfoComplete);
			}
			
			private function onOperadorInfoComplete(event:Event):void
			{
				if(operador.info.toString() == "true")
				{
					entrar();
				}
			}
en tu classe "Operador.as"

Código:
package
{
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
		
	public class Operador
	{
		
		private var _info:XML;
		public var existe:URLLoader;
		public var _request:URLRequest;
		
		public function Operador():void
		{
			_request = new URLRequest("unXML.xml");
			existe = new URLLoader();
			existe.load(_request);
			existe.addEventListener(Event.COMPLETE, eventoExiste);
		}
		
		private function eventoExiste(event:Event):void{    
			var  xml:XML = new XML(event.target.data);
			info = xml;
		}
		
		public function set info(value:XML):void
		{
			if(value === _info) return;
			_info = value;
		}
		
		public function get info():XML
		{
			return _info;
		}
	}
}
espero que te sirva...le tienes que hacer algunas modificaciones porque escribi y borre a lo loco! asi que no esta del todo dinamico... ciao! estas programando con flex o flash?
  #7 (permalink)  
Antiguo 10/10/2007, 01:10
 
Fecha de Ingreso: febrero-2007
Mensajes: 111
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: [as3]

En flash. Y no esperaba tener que utilizar un XML. Muchas gracias por tu respuesta. Voy a probarlo.
  #8 (permalink)  
Antiguo 10/10/2007, 02:30
 
Fecha de Ingreso: febrero-2007
Mensajes: 111
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: [as3]

Ya funciona. Esto ultimo me ha dado la idea de utilizar un URLLoader de la clase que sea público y que por lo tanto lo pueda invocar desde mi flash. Lo pongo aquí ya que me habeis ayudado:

En el flash, hay dos cajas de texto usuario y pass y un boton ok_btn:

Código:
ok_btn.addEventListener(MouseEvent.CLICK, ok);
function ok(evento:MouseEvent){
	var operador:Operador = new Operador(usuario.text, pass.text);
	operador.cargador.addEventListener(Event.COMPLETE, eventoExiste);
	operador.existe();
	
}



function eventoExiste(event:Event):void{    
	var  variables:URLVariables = new URLVariables(event.target.data);
	trace("entra a eventoExiste");
	if(variables.encontrado == "si"){
              entrar();
        }
	
}

Ahora en mi clase operador tengo:

Código:
public var cargador:URLLoader = new URLLoader();
...............


public function existe():void{
		
		var url:String = this.__path + "loginoperador.php?nocache=";
                var request:URLRequest = new URLRequest(url);
                var variables:URLVariables = new URLVariables();
		
		variables.usuario = this.__usuario;
		variables.password = this.__password;
		
		request.data = variables;
		request.method = "POST";
		cargador.load(request);
}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:16.