Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





XNA 2D

Iniciado por hawthdown, 18 de Junio de 2008, 07:15:27 PM

« anterior - próximo »

hawthdown

Buenas, posteo para ver si me pueden ayudar con este motor un problema que tengo.

Reicen empiezo, y estoy intentando hacer un juegito estilo PONG, el problema que tengo es con la pelota, lo pude hacer mover y todo, pero cuando choca con la ventana de abajo, osea, con la pared de la ventana, es como que si chocara, pero va hacia delante hasta que choca con otra pared y se queda clavado, me pueden decir por que pasa esto. Les dejo el codigo para que ven si tengo añgo mal.

pelota.v_bola = new Vector2(100f, 150f);
           pelota.p_bola += pelota.v_bola * (float)gameTime.ElapsedGameTime.TotalSeconds;
           int maxX = Window.ClientBounds.Width - pelota.t_bola.Height;
           int minX = 0;
           int maxY = Window.ClientBounds.Height - pelota.t_bola.Width;
           int minY = 0;

           if (pelota.p_bola.X > maxX)
           {
               pelota.v_bola.X *= -1f;
               pelota.p_bola.X = maxX;
           }
           else if (pelota.p_bola.X < minX)
           {
               pelota.v_bola.X *= -1f;
               pelota.p_bola.X = minX;
           }

           if (pelota.p_bola.Y > maxY)
           {
               pelota.v_bola.Y *= -1f;
               pelota.p_bola.Y = maxY;
           }
           else if (pelota.p_bola.Y < minY)
           {
               pelota.v_bola.Y *= -1f;
               pelota.p_bola.Y = minY;
           }

Todo esto esta en el metodo update.

Desde ya, muchas gracias.
Saludos.
HawthDown, hawthdown@hotmail.com

Mars Attacks

Esto te pasa por no empezar con un MMORPG.

Vamos por partes. Así a ojo, aunque no tiene que ver, el maxX debería ser la anchura de la pantalla menos la anchura de la bola, y lo mismo para la altura. Aunque me imagino que la bola tendrá el mismo ancho que alto, así que a efectos prácticos, este asunto es indiferente para el problema que te trae por aquí.

Así a ojo, sin conocer el XNA 2D, si en cada pasada vuelves a resetear el vector de velocidad de la pelota a (100, 150) de poco va a servirte cambiarle la dirección, así que en la siguiente pasada, continuará intentando moverse hacia la dirección que le indicabas, y como sigue siendo mayor (o menor) que los límites, se volverán a setear en esa posición máxima (o mínima), y vuelta a empezar.

En resumen, las inicializaciones deben hacerse sólo una vez al comienzo de la "vida útil" del objeto, fuera del bucle de actualización. En el bucle de actualización (el update) sólo debería estar a partir del primer if.

Ánimo ;)






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.