Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: ander_bg en Septiembre 20, 2010, 11:55:21 PM

Título: Bounce (rebote) contra la room (SOLUCIONADO)
Publicado por: ander_bg en Septiembre 20, 2010, 11:55:21 PM
Hola,

Como puedo hacer para que un objeto al chocar contra la pared de la pantalla (room) rebote ?

quiero que haga un movimiento simetrico, por ejemplo asi:
  .
   .
    .|
   . |
. .  |
__.___|

Se entiende? Gracias.

PD: vaya no se muestra bien la imagen, seria algo como mover un objeto en diagonal y cuando llega a un borde rebote con 90? siguiendo la trayectoria.
Título: Re: Bounce (rebote) contra la room
Publicado por: Hackware en Septiembre 21, 2010, 01:54:18 AM
Intenta colocando objetos s?lidos fuera de room y usando la funci?n move_bounce_solid() en el evento de colisi?n con los objetos s?lidos.

?Saludos!
Título: Re: Bounce (rebote) contra la room
Publicado por: ander_bg en Septiembre 21, 2010, 03:08:47 AM
Cita de: Hackware en Septiembre 21, 2010, 01:54:18 AM
Intenta colocando objetos s?lidos fuera de room y usando la funci?n move_bounce_solid() en el evento de colisi?n con los objetos s?lidos.

?Saludos!

Y no se podria sin emplear objetos fuera de la room?
Es decir, si el objeto esta fuera de los limites de la room , cambie la direccion. Necesitaria el codigo GML, porque con D&D he conseguido hacerlo:
Outside room > Execute code > direction=direction-45

De esta manera ahorraria el crear objetos y por lo tanto memoria.
Título: Re: Bounce (rebote) contra la room
Publicado por: Munguia en Septiembre 21, 2010, 03:30:25 AM
usa un ?nico objeto repetidamente, si lo hac?s de 16x16 y directamente creado en el editor de imagenes, es decir un cuadrito de color blanco por ejemplo este no te cunsumir?a pr?cticamente nada de memoria, si necesitas hacer un codigo de out side room el objeto a rebotar debe salir del room y eso est? raro, deber?a existir en ese caso una opci?n de borde del room y no afuera del room y que yo sepa no existe
Título: Re: Bounce (rebote) contra la room
Publicado por: ander_bg en Septiembre 21, 2010, 04:06:37 AM
El asunto estaria en rebotar el objeto cuando x>room_width-sprite_width o algo similar.
Título: Re: Bounce (rebote) contra la room
Publicado por: Hackware en Septiembre 21, 2010, 09:14:34 AM
Cita de: Munguia en Septiembre 21, 2010, 03:30:25 AM
usa un ?nico objeto repetidamente, si lo hac?s de 16x16 y directamente creado en el editor de imagenes, es decir un cuadrito de color blanco por ejemplo este no te cunsumir?a pr?cticamente nada de memoria...
Si te refieres a hacer un sprite de 16x16 est? bien, aunque yo lo har?a directamente de 1x1 y lo estrechar?a con c?digo; pero si hablas de objetos de 16x16 yo dir?a que es mejor hacerlos m?s grandes porque as? tendr?as que poner menos en la room (lo cual representa menos variables en memoria) y ser?n m?s dif?ciles de atravesar por exceso de velocidad.

Cita de: Munguia en Septiembre 21, 2010, 03:30:25 AM
...deber?a existir en ese caso una opci?n de borde del room y no afuera del room y que yo sepa no existe.
Image Boundary. :D
Sin embargo, yo no recomiendo su uso a menos que la velocidad del objeto rebotante no sobrepase la longitud de su di?metro o de lo contrario pasar? de largo el borde sin rebotar, a eso me refiero con "atravesar por exceso de velocidad".

Otra posible soluci?n es esa que mencionas, ander_bg. Puedes crear un script que revise en cada step que cada borde del objeto no sobrepase su correspodiente borde de la room. En GML ser?a as?:

Citarif (x<=0) hspeed*=-1; //lo mismo que escribir hspeed=-hspeed
if (x+sprite_width>=room_width) hspeed*=-1;
if (y<=0) vspeed*=-1;
if (y+sprite_height>=room_height) vspeed*=-1;

Al invertir las velocidades vertical y horizontal logr?s un rebote sim?trico.

Espero haberte ayudado ?Saludos!
Título: Re: Bounce (rebote) contra la room
Publicado por: ander_bg en Septiembre 21, 2010, 12:00:30 PM
if (x<=0) hspeed*=-1; //lo mismo que escribir hspeed=-hspeed
if (x+sprite_width>=room_width) hspeed*=-1;
if (y<=0) vspeed*=-1;
if (y+sprite_height>=room_height) vspeed*=-1;

Probare esta solucion que indicas. De todas formas lo que he hecho ha sido crear 2 objetos , uno con tama?o de sprite 8pixeles*(room_heigth) y otro 8pixeles*room_width. Los he colocado en cada lateral de la room, y los he declarado INVISIBLES de esta manera el bojeto rebota contra ellos y no se ve.
La idea estener un objeto "powerup" que este continuamente en pantalla moviendose hasta que el player lo recoja (shootemup).

Título: Re: Bounce (rebote) contra la room (SOLUCIONADO)
Publicado por: ander_bg en Septiembre 21, 2010, 12:10:11 PM
Gracias Hackware ,

Tu solucion funciona perfectamente !   :P
Título: Re: Bounce (rebote) contra la room (SOLUCIONADO)
Publicado por: Hackware en Septiembre 21, 2010, 07:54:12 PM
Me alegro mucho por ti. :)

?Saludos! 8)