Movimiento de un objeto cada x tiempo 2D

Respondida Movimiento de un objeto cada x tiempo 2D

  • jueves, 29 de marzo de 2012 8:48
     
      Tiene código

    Estoy intentando mover un objeto para que se mueva el solo cada x tiempo pero no lo consigo, la logica de la accion es, yo pincho con el raton en el objeto y luego pincho en otro luegar del mapa y quiero que se desplace a ese lugar, lo he intentado hacer para que cada x segundos se desplace un pixel a la derecha, os dejo el codigo por si me podeis echar un cable.

    private MouseState ms, mouseStatePrevious;
    private bool seleccionado = false;
    private Rectangle = new Rectangle(200, 200, 40, 40);
    private float timer = 1000.0f;
    private float timeRemaining = 0.0f;
    
    public void Update(GameTime gameTime)
            {
                ms = Mouse.GetState();
                KeyboardState ks = Keyboard.GetState();
    
    
                if (ms.LeftButton == ButtonState.Pressed && mouseStatePrevious.LeftButton == ButtonState.Released && seleccionado == true)
                {
                    while (posSprite01.X < ms.X)
                    {
                        if (timeRemaining == 0.0f)
                        {
                            posSprite01.X += 1;
                            timeRemaining = timer;
                        }
                        timeRemaining = MathHelper.Max(0.0f, timeRemaining - (float)gameTime.ElapsedGameTime.TotalSeconds);   
                    }
                    seleccionado = false;
                }
    }

Todas las respuestas

  • jueves, 29 de marzo de 2012 10:52
     
     Respondida
    Buenas,


    supongo que el estado seleccionado lo calculas previamente y que esto se ejecuta cuando haces el click en la posicion de destino

    if (ms.LeftButton == ButtonState.Pressed && mouseStatePrevious.LeftButton == ButtonState.Released && seleccionado == true)
       {
            posFinal = new Vector2(ms.X, ms.Y);
            seleccionado = false;
       }

    posSprite01 = posSprite01 + (posFinal - PosSprite01) * 0.1f;
    if (Vector2.LengthSquared(posSprite01 , posFinal)>0.05f) posSprite01 = posFinal;
    Lo puedes hacer en un tiempo determinado, pero te complica la vida, y esto hace un bonito efecto de aceleración, 
    quizas tengas que cambiar el factor 0.1f por otro, ya que lo he puesto a ojo;


    si lo quieres por tiempo, 


    if (ms.LeftButton == ButtonState.Pressed && mouseStatePrevious.LeftButton == ButtonState.Released && seleccionado == true)
    {
          posFinal = new Vector2(ms.X, ms.Y);
          recorrido = posFinal - posSprite01;
          tiempo_andando = recorrido.Length() / velocidad;
          recorrido.Normalize();
          seleccionado = false;
    }


    if (tiempo_andando>0) {
          tiempo_andando -= gametime.elapsedtime.totalseconds;
          if (tiempo_andando>0) {
             tiempo_andando = 0;
             posSprite01 = posFinal;
          } else {
             posSprite01 += recorrido * gametime.elapsed.totalseconds;  
          }
    }

    No lo he probado pero deberia funcionar...

    Un saludo


    Tambien conocido como Blau www.youtube.com/malditis www.charcostudios.com


    • Marcado como respuesta hectorrp jueves, 29 de marzo de 2012 10:56
    • Editado CharcoStudios jueves, 29 de marzo de 2012 11:07
    •