Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: w_ally en Julio 19, 2011, 06:12:16 AM

Título: detener al l?mite de la pantalla
Publicado por: w_ally en Julio 19, 2011, 06:12:16 AM
Bueno, abro un tema aparte porque, por alg?n extra?o motivo, no me funcion? ninguna de las soluciones que me dieron en mi otro post.

El problema lo vuelvo a explicar: quiero que mi personaje se detenga al llegar al borde de la pantalla, con que sea al borde izquierdo es suficiente, aunque tambi?n servir?a saber como hacerlo en los otros bordes solo para futuros juegos.

Ahora digo en que fallaron las soluciones anteriores:

Al colocar un nuevo objeto, un cuadrado de 16 x 16, sucede que mi personaje, no se porque motivo, ya no salta, e incluso se queda suspendido a la altura a la que la coloque, es decir que deja de funcionar su gravedad, desconozco el porque hace esto.

Ahora, el problema con el c?digo:

Parece que funciona al estar el personaje sin movimiento cerca del borde de la pantalla, peroooooo..., si el personaje se acerca al borde y est? en movimiento, no se detiene, se sigue saliendo.

Para mayor informaci?n dejo aqu? la informaci?n de mi objeto "personaje":


Create Event:
execute code:

view_visible[0] = true

Step Event:
if position (0,1) is collision free for Only solid objects
      set the gravity to 1 in direction 270
else
      set the gravity to 0 in direction 270
if vspeed is larger than 12
      set variable vspeed to 12

Collision Event with object Suelo:
move in direction direction at most 12 till a contact with solid objects
set the vertical speed to 0

Collision Event with object enemigo_1:
sleep 500 milliseconds; redrawing the screen: true
change the instance into object sin casco, yes performing events

Key Press Event for <Ctrl> Key:
if relative position (0,1) gives a collision with Only solid objects
      set the vertical speed relative to -8

Key Press Event for <Left> Key:
if personaje.x is larger than 10
      set the horizontal speed relative to -8
      set the sprite to personaje_izq with subimage 0 and speed 1
else
      set the horizontal speed relative to 0
      set the sprite to quieto_izq with subimage 0 and speed 1

Key Press Event for <Right> Key:
set the horizontal speed relative to 8
set the sprite to personaje_der with subimage 0 and speed 1

Key Release Event for <Left> Key:
start moving in directions 000010000 with speed set to 0
set the sprite to quieto_izq with subimage 0 and speed 1

Key Release Event for <Right> Key:
start moving in directions 000010000 with speed set to 0
set the sprite to quieto_der with subimage 0 and speed 1


S?lo cambie el movimiento hacia la izquierda, por lo que pueden ver como manejo el movimiento originalmente hacia la derecha.
Título: Re: detener al l?mite de la pantalla
Publicado por: Zeit en Julio 19, 2011, 06:28:07 AM
Hola, otra solucion es en el evento end_step pon un codigo como:
1. max(0,x); para el limite por la izquierda.
2. min(room_width,x); para el limite por la derecha.
3. max(0,min(room_width,x)); para ambos limites.

Saludos.
Título: Re: detener al l?mite de la pantalla
Publicado por: Zigma en Julio 19, 2011, 06:17:20 PM
Hola!!

Dices que ya has intentado colocar un objeto solido para marcar limite y no te funciono??

Eso es raro. .   

En mi experiencia he programado practicamente juegos de plataformas por lo que tu situacion es de lo mas comun que he visto y la verdad a mi me ha funcionado muy bien el uso de "solidos invisibles" para marcar limites ya sean paredes, techos o pisos.

En mi caso lo que hago es colocar los solidos donde deseo establecer limites, y luego con el objeto movil, en el "step event" revisar la posibilidad de moverse.

Por ejemplo.. .  si mi personaje solo se mueve al presionar la tecla derecha, en el step event uso  (para GM7):

  if (place_free(x+4,y)) x += 4;

Asi el personaje solo avance 4 pixeles por paso siempre y cuando el lugar este libre.

Si el objeto trae velocidad, entonces pongo:

if (not place_free(x+hspeed,y)) hspeed = 0;

Y este codigo aplica tanto si la velocidad es positiva como negativa.


Lo anterior no me ha generado conflictos con la gravedad. 

Espero te sea de ayuda, si no, pues aqui seguimos comentando.

Saludos!! 
Título: Re: detener al l?mite de la pantalla
Publicado por: MaanuRP en Julio 20, 2011, 03:18:50 AM
Con lo de "limites invisibles" debe ser porque cancelas alguna variable que no debes cancelar.

Intenta de nuevo, eso tendria que funcionar si o si, es lo mas comun y todos saben que funciona.

Y si no, hazlo con codigos, pero va a ser lo mismo, porque con codigos vas a tener que cancelar las mismas variables que con las paredes.