Comunidad de diseño web y desarrollo en internet online

Detener MovieClip [principiante inside]

Citar            
MensajeEscrito el 21 Feb 2014 07:52 pm
Buenas tardes compañeros.

Me estoy iniciando en el mundo de la programación a través de Flash en AS3, haciendo mis esfuerzos en un pong bastante simple pero me está costando especialmente el que la después de un gol la bola se quede nuevamente parada en el centro del escenario para volver a iniciar el movimiento con un click.

Podría alguien arrojarme algo de luz?

Por pabloj

5 de clabLevel



 

safari
Citar            
MensajeEscrito el 22 Feb 2014 11:56 am
Cuéntanos como la estas animando

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Feb 2014 12:36 pm
Hola Jorge,

Te transcribo el código con el que animo la pelota:

Código ActionScript :

var velocidadBolaX:int = new int(-4);
var velocidadBolaY:int = new int(-2);
bola.addEventListener(Event.ENTER_FRAME, bucleHandler);
   stage.removeEventListener(MouseEvent.CLICK, inicioHandler);

   function bucleHandler(e:Event)
   {
      bola.x += velocidadBolaX;
      bola.y += velocidadBolaY;
   
   
      if(bola.x <=bola.width/2)
      {
         bola.x = bola.width/2;
         velocidadBolaX *= -1;
                }
                
                else if(bola.x >= stage.stageWidth-bola.width/2)
      {
         bola.x = stage.stageWidth-bola.width/2;
         velocidadBolaX *=-1;
                }


Ahora estaba intentando crear una función para "resetear" el juego, de la siguiente manera:

Código ActionScript :

function resetHandler()
{
   if(bola.x <= stage.stageWidth-bola.width/2)
   {
      bola.x = stage.stageWidth/2;
      bola.y = stage.stageHeight/2;
   }
   
}


Pero seguro que hay una forma más fácil a través de alguna clase específica para ello. Como véis, es un código bastante "noob", mis primeros pinitos en el mundillo.

Gracias por vuestra atención!

Por pabloj

5 de clabLevel



 

safari
Citar            
MensajeEscrito el 22 Feb 2014 12:45 pm
Me olvidaba de la coordenada "y":

Código ActionScript :

if(bola.y <=bola.height/2)
      {
         bola.y = bola.height/2;
         velocidadBolaY *=-1;
      }
   
      else if(bola.y >= stage.stageHeight-bola.height/2)
      {
         bola.y = stage.stageHeight-bola.height/2;
         velocidadBolaY *=-1;
      }

Por pabloj

5 de clabLevel



 

safari
Citar            
MensajeEscrito el 22 Feb 2014 12:46 pm
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 22 Feb 2014 12:54 pm
Sí, pero ahí está solo el código para la animación de la pelota.

Si quieres el código al completo, lo pego aquí.

Por pabloj

5 de clabLevel



 

safari
Citar            
MensajeEscrito el 22 Feb 2014 12:56 pm
Ok, no se entendió la pregunta. La bola se queda parada, o no logras hacerlo?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Feb 2014 01:02 pm
No logro que la bola se quede parada en el centro tras un gol, y vuelva a moverse cuando se hace click.

Por pabloj

5 de clabLevel



 

safari
Citar            
MensajeEscrito el 22 Feb 2014 01:25 pm
Ok, para que se quede parada primero tienes que quitar el onEnterFrame

Código ActionScript :

function resetHandler(){
    // las condiciones que necesites chequear ... y si eso pasa ....
     bola.removeEventListener(Event.ENTER_FRAME, bucleHandler);

}


Otra opción sería poner la velocidadBolaX y velocidadBolaY a cero

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Feb 2014 01:51 pm
Ya había probado poniendo la velocidad a 0, pero después la bola no reacciona al click.

Por pabloj

5 de clabLevel



 

safari
Citar            
MensajeEscrito el 22 Feb 2014 02:24 pm
En el click, si la velocidad es cero, entonces la tienes que volver a lo que era antes

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Feb 2014 09:58 pm
Pero es ahí donde no sé por donde salir. Sigo dándole vueltas pero estoy estancado con este detalle.

Por pabloj

5 de clabLevel



 

safari
Citar            
MensajeEscrito el 23 Feb 2014 12:15 am
Resetear un juego es un típico problema, y en general tiene que ver con la estructuración. En algún lugar asignas esas velocidades y después disparas el onEnterFrame. Digamos que la pelota se para en el centro. Cual es la acción que inicia de nuevo el juego? Un click? Donde? Allí es donde tienes que volver a asignar las velocidades

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Feb 2014 07:18 pm
A ver, la cuestión es que tras el gol, solo consigo volver la pelota a la posición inicial reubicandola, y detenerla estableciendo la velocidad en 0.

Después no consigo que reaccione nuevamente al click.

Pego todo el código a ver si le damos solución.

Código ActionScript :

import flash.events.*

var velocidadBolaX:int = new int(-4);
var velocidadBolaY:int = new int(-2);
//var velocidadX:int = new int(-4);
//var velocidadY:int = new int(-2);
var velocidadBarraCPU:int = new int(3);
var puntosJugador1:int = new int(0);
var puntosCPU:int = new int(0);


stage.addEventListener(MouseEvent.CLICK, inicioHandler);

function inicioHandler(event:MouseEvent)
{
   bola.addEventListener(Event.ENTER_FRAME, bucleHandler);
   stage.removeEventListener(MouseEvent.CLICK, inicioHandler);

   function bucleHandler(e:Event)
   {
      bola.x += velocidadBolaX;
      bola.y += velocidadBolaY;
   
   
      if(bola.x <=bola.width/2)
      {
         bola.x = bola.width/2;
         velocidadBolaX *= -1;
         puntosCPU++;
         actualizarMarcadorHandler();
         resetHandler();
      }
   
      else if(bola.x >= stage.stageWidth-bola.width/2)
      {
         bola.x = stage.stageWidth-bola.width/2;
         velocidadBolaX *= -1;
         puntosJugador1++;
         actualizarMarcadorHandler();
         resetHandler();
      }
   
      if(bola.y <=bola.height/2)
      {
         bola.y = bola.height/2;
         velocidadBolaY *=-1;
      }
   
      else if(bola.y >= stage.stageHeight-bola.height/2)
      {
         bola.y = stage.stageHeight-bola.height/2;
         velocidadBolaY *=-1;
      }

   
   barraJugador1.addEventListener(MouseEvent.MOUSE_DOWN, arrastrarHandler);
   stage.addEventListener(MouseEvent.MOUSE_UP, soltarHandler);
   
      function arrastrarHandler (MouseEvent)
      {
         barraJugador1.startDrag(true, new Rectangle (40, 0+barraJugador1.height/2, 0, 768-barraJugador1.height));
      }
   
      function soltarHandler (MouseEvent)
      {
         barraJugador1.stopDrag();
      }
   
      if(barraJugador1.y-barraJugador1.height/2 < 0)
      {
         barraJugador1.y = barraJugador1.height/2;
      }
   
      else if(barraJugador1.y + barraJugador1.height/2 > stage.stageHeight)
      {
         barraJugador1.y = stage.stageHeight - barraJugador1.height/2;
      }
   
      if(barraCPU.y < bola.y - 10)
      {
         barraCPU.y += velocidadBarraCPU;
      }
   
      else if(barraCPU.y > bola.y + 10)
      {
         barraCPU.y -= velocidadBarraCPU;
      }
      
      if(barraCPU.y - barraCPU.height/2 < 0)
      {
         barraCPU.y = barraCPU.height/2;
      }
      
      else if(barraCPU.y + barraCPU.height/2 > stage.stageHeight)
      {
         barraCPU.y = stage.stageHeight - barraCPU.height/2;
      }
   
      if(barraJugador1.hitTestObject(bola) == true)
      {
         if(velocidadBolaX < 0)
         {
            velocidadBolaX *= -1;
            velocidadBolaY = reboteBolaHandler(barraJugador1.y, bola.y);
         }
      }
   
      else if(barraCPU.hitTestObject(bola) == true)
      {
         if(velocidadBolaX > 0)
         {
            velocidadBolaX *= -1;
            velocidadBolaY = reboteBolaHandler(barraCPU.y, bola.y);
         }
      }
   
    
   }
   
   puntosJugador1 = 0
   puntosCPU = 0

}

function reboteBolaHandler (barraY:Number, bolaY:Number):Number 
{
   var velocidadY:Number = 5 * ((bolaY-barraY)/25);
   return velocidadY;
}


function actualizarMarcadorHandler()
{
   marcadorJugador1.text = ("Jugador 1: " + puntosJugador1)
   marcadorCPU.text = ("CPU: " + puntosCPU)
}


function resetHandler()
{
   bola.x = stage.stageWidth/2;
   bola.y = stage.stageHeight/2;
//   return bucleHandler;
}

Por pabloj

5 de clabLevel



 

safari
Citar            
MensajeEscrito el 23 Feb 2014 10:24 pm
Ok, tienes funciones metidas dentro de funciones ... mejor haz esto: borra el onEnterFrame

bola.removeEventListener(Event.ENTER_FRAME, bucleHandler);

Y cuando quieras que se mueva de nuevo

bola.addEventListener(Event.ENTER_FRAME, bucleHandler);

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Feb 2014 11:35 pm
Solucionado este asunto amigo, muchas gracias.

Ahora tengo un problema actualizando el marcador que trataré de solucionar mañana.

Saludos.

Por pabloj

5 de clabLevel



 

safari

 

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