Hola amigos, ya he visto en el foro que hay algunas preguntas que hacen alusión a este tipo de juego. De todos modos no he encontrado en ninguna de ellas la solución que busco y que paso a explicar a continuación.
Estoy desarrollando un juego tipo "Arkanoid" con el fin de mejorar mi técnica y aprender nuevos conceptos acerca de GAME MAKER. Este proyecto en concreto lo estoy programando en GMS.
Para este proyecto cuento con 4 objetos: una bola, una barra para el jugador, un muro para que la bola no se salga de la habitación y unos bloques que hay que destruir.
Si coloco un evento de colisión y la acción move_bounce_solid(); al objeto bola con los otros 3 elementos, esta rebota, pero en ocasiones, no se comporta de forma correcta. Es decir, hay veces que está rebotando en horizontal y se queda ahi todo el tiempo sin posibilidad a que el jugador "barra" pueda continuar jugando.
Por otro lado, y para darle más jugabilidad al mismo,el objeto bola, tendría que salir rebotado en distintas direcciones, dependiendo del lugar donde golpee en la "barra" o jugador.
He visto este código en el foro, pero no sé dónde hay que colocarlo, ni tampoco si sirve para solucionar todos los problemas anteriormente descritos.
{
if (other.x < x)
{ other.direction = 110 + 80*(x-other.x)/sprite_width;}
else
{ other.direction = 70 + 80*(x-other.x)/sprite_width;}
if (other.y > y) other.direction := 360-other.direction;
}
Espero haberme explicado con claridad.
Gracias de antemano a todos.
Saludos
JR-ONIS
El código ese ponelo en step de la bola.
En colisión con los demás objetos usá este código.
Al rebotar con las paredes:
[gml]
hspeed = -hspeed;
[/gml]
Al rebotar en el techo o bloques:
[gml]
vspeed = -vspeed;
[/gml]
Con eso ya tendrías todo solucionado.
el codigo de rebote horizontal es asi; hspeed*=-1; y del rebote vertical vspeed*=-1;
Pero mejor te dejo un Arkanoid hecho por mi y asi aprendes....
Nota: Esta en GM8.1 pero hasta donde se el :GMS: abre los archivos del GM.8.1, ai que abrelo y verificalo.
En realidad elviskelley, como lo puse es exactamente lo mismo y más simple de entender, iba a poner el que pusiste pero se podía generar confusiones de porqué *=-1 (que al fin y al cabo se le cambia de signo nada más xD)