Logo

¡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.
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.