Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





#ultimosproyectosxna Hacer camara desplazable con drag en WP

Iniciado por combo_heroe, 15 de Marzo de 2013, 04:59:08 AM

« anterior - próximo »

combo_heroe

Hola tengo un calse camara que utilizo en mi juego, la cual esta basada de ejemplos de internet

public class Camera
    {
        public Matrix View;

        public Vector2 Posicion;

        public Vector2 CentroPantalla;

        public float Scala;

        private Rectangle rect;

        private Vector2 vel;

        public Camera() {
            CentroPantalla =
                        new Vector2(400,240);
            Posicion = Vector2.Zero;


            View = Matrix.Identity;

            Scala = 1;

            rect = new Rectangle(-400, -240, 800+400, 480+240);
        }

        public Camera(Viewport viewport, Vector2 posicion) {
            CentroPantalla =
                    new Vector2(viewport.Width / 2f, viewport.Height / 2f);
            Posicion = posicion;


            View = Matrix.Identity;

            Scala = 1;

            rect = new Rectangle(-400, -240, (int)(viewport.Width*1.5f), (int)(viewport.Height*1.5f));

        }

       

        public void Mover(float x, float y)
        {
            System.Diagnostics.Debug.WriteLine("Mover()");

            if (Math.Abs(vel.Length()) != 0)
            {
                System.Diagnostics.Debug.WriteLine("Mover Detenido");

                return;
            }

           
                //Posicion.X -= x;
                //Posicion.Y -= y;

                vel.X = x;
                vel.Y = y;
           
            else
            {
                System.Diagnostics.Debug.WriteLine(string.Format("X:{0} Y:{1}", (Posicion.X - x), (int)(Posicion.Y - y)));
            }


        }

        public Vector2 ScreenToWorld(Vector2 screenpoint) {
            return screenpoint - (CentroPantalla - Posicion);
        }

        public void Update()
        {           

            Posicion -= vel;

            vel /= 2;

            if (vel.Length() < .2f) {
                vel = Vector2.Zero;
            }

            View = Matrix.CreateTranslation(new Vector3(-Posicion.X, -Posicion.Y, 0))
                * Matrix.CreateRotationZ(0)
                * Matrix.CreateScale(new Vector3(Scala, Scala, 1))
                * Matrix.CreateTranslation(new Vector3(800 * 0.5f, 480 * .5f, 0))
                ;

           

           


        }


y en el Update tengo

if (TouchPanel.IsGestureAvailable) {

                var gesto = TouchPanel.ReadGesture();
                if (gesto.GestureType == GestureType.FreeDrag) {

                    //System.Diagnostics.Debug.WriteLine("p" + gesto.Position + "p2"+ gesto.Position2 + "d" + gesto.Delta + "d2" + gesto.Delta2 + "t" + gesto.Timestamp);
                   
                    //camara.Posicion -= gesto.Delta; primero intente este
                    Vector2 tmp = gesto.Delta * 3;
                    camara.Mover(tmp.X, tmp.Y);
                }
            }


La idea es que se mueva la camara acorde al movimiento del toque en la pantalla, pero no tengo buenos resultados de ninguda de las dos formas que he intentado.

en la primera cambiaba simplemente la posicion, es mas o menos decente cuando se da un drag corto (aunque el movimiento es muy de golpe), pero si trato de pulsar y sostener y mover levemente la camara, esta se vuelve loca y termina su movimiento varios segundos despues.

y en la segunda como se invoca muchas veces el metodo mover, la camara cambia de posicion por pasos, es decir, cuando se mueve del punto A al B da 3 o 4 pasos, donde la camara se mueve, se detiene por la condicion de velocidad, se vuelve a invocar Mover, y eso es terrible para la jugabilidad.

¿que puedo hacer?

muchas gracias por sus respuestas






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.