Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Mejorar rebotes en el Pong

Iniciado por DarkGDK, 30 de Marzo de 2010, 07:28:19 PM

« anterior - próximo »

DarkGDK

Hola, soy programador de tecnologías móviles y en mis ratos libres me gusta aprender sobre el desarrollo de videojuegos.

Me he decidido a programar un simple pong para aprender y meterme en cosas más serias. Ya tenía nociones con lo que en un par de días he "terminado" mi pong.

La verdad es que ha sido una gran experiencia porque he tocado el tema de las colisiones, cambios de sentido en los vectores de dirección de la bola y temás gráficos que seguro me resultan útiles en el futuro.

El caso es que quiero mejorar mi pong, os cuento.

Actualmente, cuando la bola impacta con la paleta, sale rebotada en la dirección especular que inicialmente tenía. Es decir, si inicialmente el vector de dirección de la bola es (5, 2), el vector de dirección de la bola resultante después de la colisión es (-5, 2). Se podría decir que el vector resultante es el vector reflejado del original respecto de la paleta, como si la paleta fuera un espejo y la bola un fotón.

El caso es que este tipo de rebote me parece muy simple y me gustaría implementar el rebote típico de Arkanoid o Pong más moderno. Es decir, que si la bola impacta en la parte baja de la paleta ésta rebotará hacia abajo aunque la bola venga de abajo, si habéis jugado al pong o al Arkanoid seguro que me entendéis.

El caso es que no se bien cómo está implementado para clavar este aspecto.

¿Me echáis un cable?

Saludos.

[EX3]

Yo lo que haria seria separar en 3 zonas o mas la raqueta y programar segun la zona en la que colisione un angulo mas agudo o mas leve de rebote. Algo similar hice en un arkanoid hace algun tiempo y aun usando angulos basicos como el tuyo, angulo "reflejo", el efecto se lograba correcto sobre todo en los extremos por ejemplo.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

DarkGDK

Sí, estaba pensando en discretizar la raqueta en distintas zonas.

Otra idea que se me acaba de ocurrir es asociar un ángulo a cada punto de la raqueta. Para ello hago la siguiente equivalencia: Pi es a la longitud de mi raqueta, por tanto si bota en la mitad de la raqueta el ángulo será PI / 2 = 90 º. Con lo que funciona, yo creo que esto clava el rebote.

Os habréis dado cuenta de que si bota justo en los extremos los ángulos serán 0 (0º) y PI (180º) respectivamente con lo que la bola rebota de manera vertical en Pong y horizontal en Arkanoid, lo que se me ocurre es redefinir la equivalencia como Pi es a la longitud de mi raqueta más un 20% de la longitud de mi raqueta, con esto me aseguro de que nunca haya un rebote horizontal.

Saludos.

Buffon

Para que no sea el típico PONG también puedes hacer la raqueta un poco distinta, así el rebote según la raqueta es normal físicamente y las zonas diferenciadas dan una mejor idea de donde rebotará al jugador.

A mi me estresaba cuando la pelota tocaba demasiado el lateral de la raqueta y se iba a una dirección que yo no tenía prevista. pero si haces la raqueta con una forma más escalonada le puedes dar más estrategia al juego.

t-spy

El sistema que usé yo es ligeramente diferente. También calculé el punto de impacto respecto al centro de la raqueta para calcular el ángulo de salida, pero en lugar de dar un ángulo de salida fijo según el punto lo que hice fue sumar o restar a dicho ángulo un valor proporcional al punto de colisión y al ángulo de llegada.

Para hacerte una idea: en un juego tipo Arkanoid si la bola entraba con un ángulo de 80 el ángulo en la salida (en el centro de la raqueta) sería de 100. Cuanto más a la derecha más cerca de 80. Sin embargo, cuanto más a la izquierda más cerca de... 120. Es decir,  lo que yo hacía era tomar la diferencia entre el ángulo de entrada y su espejo (rebote perfecto en el centro) y tomar como límites en la salida el ángulo espejo más la diferencia y el ángulo espejo menos la diferencia (con un mínimo a cada lado, que la bola no puede salir plana o hacia abajo), calculando la salida en función del punto de la raqueta en que golpea.


Mars Attacks

También puedes usar tu función relativa al punto de la raqueta y clampearla a los valores mínimos y máximos que te interesen. Es la opción más fácil, desde mi punto de vista.

Hpadrono

pues yo ando en lo mismo programando un pong soy novato en el desarrollo de juegos ya tengo todo hecho solo falta las colisiones de la pelota con las paletas para terminar la jugabilidad ya solo me faltaria poner el marcador y ponerle inteligencia artificial a la paleta pero lo mas importante son las colisiones

Netto22

Cita de: t-spy en 31 de Marzo de 2010, 08:56:52 AM
El sistema que usé yo es ligeramente diferente. También calculé el punto de impacto respecto al centro de la raqueta para calcular el ángulo de salida, pero en lugar de dar un ángulo de salida fijo según el punto lo que hice fue sumar o restar a dicho ángulo un valor proporcional al punto de colisión y al ángulo de llegada.

Para hacerte una idea: en un juego tipo Arkanoid si la bola entraba con un ángulo de 80 el ángulo en la salida (en el centro de la raqueta) sería de 100. Cuanto más a la derecha más cerca de 80. Sin embargo, cuanto más a la izquierda más cerca de... 120. Es decir,  lo que yo hacía era tomar la diferencia entre el ángulo de entrada y su espejo (rebote perfecto en el centro) y tomar como límites en la salida el ángulo espejo más la diferencia y el ángulo espejo menos la diferencia (con un mínimo a cada lado, que la bola no puede salir plana o hacia abajo), calculando la salida en función del punto de la raqueta en que golpea.



Creo que estoy viendo por donde van los tiros pero podrias hacer un esquema simple de lo que explicas?

Te lo agradeceria.






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.