Comunidad de diseño web y desarrollo en internet online

problema con MouseEvent y keyboardEvent, alguna Solución???

Citar            
MensajeEscrito el 26 Jul 2012 06:45 pm
Cordial Saludo.

Nuevamente por aqui con algunos problemas de AS3, pero en paticular tengo uno que al final no entiendo que pasa. Estamos haciendo un juego que nos permita enseñar a recolectar basuras y depositarlas en nuestros contenedores. Aqui les dejo una prueba al juego: http://aulavirtual.udenar.edu.co/proyectojad/prueba/

Hasta el momento estamos bien, sin embargo nos falta programar algunas cosas. Sin embargo tengo un problema que pueden ver en la prueba y es que cuando esta el mensaje de instrucciones y le doy en el boton jugar debería empezar a mover el personaje, pero éste no se mueve con las teclas hasta que le de clic al escenario y allí si arranca. No entiendo este problema ya he hecho muchas cosas e incluso intente un removeListener, pero no lo logre solucionar.

Dejo a disposición el código de este problema:

Clase Admin.as (es el Main):

Código ActionScript :

package com.principal
{
   import flash.display.MovieClip;
   import flash.display.Stage;
   import flash.events.KeyboardEvent;
   import flash.ui.Keyboard;
   import flash.events.Event;
   import flash.utils.Timer;
   import flash.events.TimerEvent;
   import fl.transitions.*;
   import fl.transitions.easing.*;
   import flash.display.SimpleButton;
   import flash.events.MouseEvent;
      
   public class Admin extends MovieClip
   {
      public static var personaje:Personaje;
      public static  var mensajeinstr:MensajeInstrucciones = new MensajeInstrucciones();;
      public static var habilitateclas:Boolean = false;
      // FUNCION CONSTRUCTORA
      public function Admin ():void
      {
         
         stage.addChild(mensajeinstr);
         mensajeinstr.x = 400;
         mensajeinstr.y = 150;
         mensajeinstr.btnJugar.addEventListener(MouseEvent.MOUSE_DOWN, iniciaJuego);
         
      }
      
      private function iniciaJuego(e:MouseEvent):void
      {
         
         stage.removeChild(mensajeinstr);   
         
         personaje = new Personaje(stage);
         stage.addChild(personaje);
         personaje.x = stage.stageWidth /2;
         personaje.y = stage.stageHeight /2;
         
         personaje.addEventListener("vercontenedores",muestraElementos);
      }
      
   }
}



y esta es la clase personaje.as

Código ActionScript :

package com.principal
{   import flash.display.MovieClip;
   import flash.display.Stage;
   import flash.events.KeyboardEvent;
   import flash.ui.Keyboard;
   import flash.events.Event;
   import flash.utils.Timer;
   import flash.events.TimerEvent;
   public class Personaje extends MovieClip {
      
      //variable que permite cambiar al personaje
      private var etiqueta:String = "camina"; 
      public var etiquetad:String = "normal";
      // variable booleanas que saben las flechas pulsadas
      private var pulsadoIzq:Boolean = false;
      private var pulsadoDer:Boolean = false;
      private var pulsadoAbajo:Boolean = false;
      private var pulsadoArriba:Boolean = false;
      private var pulsadoTomaLata:Boolean = false;
      private var pulsadoLata:Boolean = false;
      private var influenciarPeaton:Boolean = false;
      
      //variables que se utilizan para saber el estado
      private var cam:Boolean = false;
      private var parada:Boolean = true;
      
      //variables que 
      private var direccion:uint;

      // variables del escenario y otros
      private var stageRef:Stage;
      private var velocidad:Number= 3;

      //variables para le timer
      private var tiempoParaGirar   :Timer   = new Timer(5, 0);
      private var tiempoParaMover   :Timer   = new Timer(5, 0);
      public var cuentica:Number = 0;
      
      public function Personaje(stageRef:Stage):void {
         this.stageRef = stageRef;
         
         stageRef.addEventListener (KeyboardEvent.KEY_DOWN, pulsarTecla);
         stageRef.addEventListener (KeyboardEvent.KEY_UP, soltarTecla);
         tiempoParaGirar.addEventListener(TimerEvent.TIMER, giraPers);
         tiempoParaGirar.start();
         tiempoParaMover.addEventListener(TimerEvent.TIMER, moverpers);
         
      }
   }
}


Reitero la prueba que tenemos hasta el momento la pueden ver en este link: http://aulavirtual.udenar.edu.co/proyectojad/prueba/, hay pueden observar ese problema en cuanto al MouseEvent y keyboardEvent.

Espero sus consejos hacía la solución ya que todavía me falta conocer mucho de esto, soy un novato más

Atentamente,

Edwin Pacheco

Por efrgau

4 de clabLevel



Genero:Masculino  

Diseñador Web

chrome
Citar            
MensajeEscrito el 26 Jul 2012 08:57 pm
Estas agregando los listeners delñ Keyboard en la clase personaje, que se instancia después de darle al botón ... en otras palabras, al darle al botón todavía no has seteado los listeners del Keyboard, por eso no funciona

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 Jul 2012 09:27 pm
Muchas gracias Jorge por la respuesta rápida, pero la verdad no entiendo la solución que me das. Es posible que des una explicación más práctica.... no entiendo eso de Setear, disculpame.

Quedo atento a tu respuesta.

Atte.

Edwin Pacheco

Por efrgau

4 de clabLevel



Genero:Masculino  

Diseñador Web

chrome
Citar            
MensajeEscrito el 26 Jul 2012 11:34 pm
Tienes que instanciar el personaje antes de que le des al boton de empezar, si quieres puedes dejarlo invisible, y cuando le das al botón lo haces visible, de esa forma tendrás creado los listeners del personaje desde antes de darle al boton

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 27 Jul 2012 03:38 am
Hola Jorge....

Te cuento que he realizado tu recomendación de instanciar al personaje primero y utilizar su propiedad de visible, sin embargo tampoco he resuelto el problema.

Este es el código:

Clase Main (Admin.as)

Código ActionScript :

   public function Admin ():void
      {
         personaje = new Personaje(stage);
         stage.addChild(personaje);
         personaje.x = stage.stageWidth /2;
         personaje.y = stage.stageHeight /2;
         personaje.visible = false;
         
         stage.addChild(mensajeinstr);
         mensajeinstr.x = 400;
         mensajeinstr.y = 150;
         
         
         
         mensajeinstr.btnJugar.addEventListener(MouseEvent.MOUSE_DOWN, iniciaJuego);
      }
      
      private function iniciaJuego(e:MouseEvent):void
      {
            
         stage.removeChild(mensajeinstr);   
         personaje.visible = true;


En la clase personaje. as no he hecho ninguna modificación, por ayudeme la verdad es que no tengo ni idea que esta pasando.

Atentamente.

Edwin Pacheco F.

Por efrgau

4 de clabLevel



Genero:Masculino  

Diseñador Web

chrome
Citar            
MensajeEscrito el 30 Jul 2012 12:49 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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