Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: vitito93 en Mayo 08, 2015, 08:10:42 PM

Título: Si entendes GML encontrá el fallo
Publicado por: vitito93 en Mayo 08, 2015, 08:10:42 PM
Hola comunidad, estoy haciendo un juego estilo plataforma, una caja que cae sobre unos pisitos y va pasando obstaculos y niveles, eso no importa, el problema es que al llegar al borde de la plataforma , si quiero volver se estanca.
Una imagen para que entiendan en que momento...
(http://img.prntscr.com/img?url=http://i.imgur.com/Agomt7i.png)
Cuando el centro de la caja pasa al fin de la plataforma, si quiero volver a la izquierda se traba.. Vi que baja un pixel mas cuando llega a ese momento.. les dejo el codigo que tengo en step de la caja para las colisiones y los movimientos... Espero me puedan ayudar y haberme explicado bien.. En resumen, cuando la mitad de la caja(centro), pasa el borde de la plataforma, esta baja un pixel y no puedo moverme a la izquierda..
/// Platform Physics
// I would recommend watching the tutorial video to better
// understand this code. The link to the video is at the bottom
// of this code.

var rkey = keyboard_check(vk_right);
var lkey = keyboard_check(vk_left);
var jkey = keyboard_check(ord("S"));

// Check for the ground
if (place_meeting(x, y+2, obj_piso)) {
    if (!place_meeting(x, y+1, obj_trampolin)) {

    vspd = 0;
   
    if (jkey) {
        vspd = -jspd;
       
    }}
} else {
    // Gravity
    if (vspd < 17) {
        if (!place_meeting(x, y+2, obj_piso)) {
        vspd += grav;}
    }
}

// Moving right
if (rkey) {
if (!place_meeting(x, y+2, obj_cintaDer)) {
    hspd = spd;} else{hspd=spd+3}
}

// Moving left
if (lkey) {
if (!place_meeting(x, y+2, obj_cintaDer)) {
    hspd = -spd;} else {hspd=-spd+3}
}

// Check for not moving
if ((!rkey && !lkey) || (rkey && lkey)) {
if (!place_meeting(x, y+2, obj_cintaDer)) {
        hspd = 0;
if (place_meeting(x, y+1, obj_azulmueve)){hspd=2*sign(obj_azulmueve.dir)}
if (place_meeting(x, y+1, obj_rojomueve)){hspd=2*sign(obj_rojomueve.dir)}
if (place_meeting(x, y+1, obj_verdemueve)){hspd=2*sign(obj_verdemueve.dir)}
if (place_meeting(x, y+1, obj_amarillomueve)){hspd=2*sign(obj_amarillomueve.dir)}
}
else {hspd=5}
}

// Horizontal collisions
if (place_meeting(x+hspd, y, obj_piso)) {
    while (!place_meeting(x+sign(hspd), y, obj_piso)) {
        x+= sign(hspd);
    }
    hspd = 0;
}

// Move horizontally
x += hspd;

// Vertical collisions
if (place_meeting(x, y+vspd, obj_piso)) {
    while (!place_meeting(x, y+sign(vspd), obj_piso)) {
        y+= sign(vspd)
    }
    if (!place_meeting(x, y+1, obj_trampolin)) {
    vspd = 0;}
   
}

// Move vertically
y += vspd;
Título: Re:Si entendes GML encontrá el fallo
Publicado por: vitito93 en Mayo 08, 2015, 08:19:16 PM
Puedo hacer que se mueva si en la parte que dice:
// Horizontal collisions
if (place_meeting(x+hspd, y, obj_piso)) {

le agrego un "-1" a la Y pero despues cuando choco con algo arriba se queda trabado, y si pongo +1 se tilda el juego :s
Título: Re:Si entendes GML encontrá el fallo
Publicado por: damyrodriiguez en Mayo 08, 2015, 08:49:55 PM
Hola Amigo !! Puedo darte una Solucion.!! espero haber entendido lo que quieres y poder ayudarte... haber dime si era esto.

Primero: abre o crea el objeto jugador..

Event Create:
Pon un Execute Code: y escribe:

right = true;
left = false;

ahora, ve pon "event keyboard" no pongas la que dice "right press, ni right released" pon
la que dice "RIGHT" solamente.. y pon un execute code con esto:

right = true; left = false;
if (place_free(x+4,y))
{x += 4;}

ahora crea otro evento keyboard y pon el LEFT, y pon otro Execute code.. asi:


left = true; right = false;
if (place_free(x-4,y))
{x -= 4;}

LISTO !!
Ahora...
-Crea un "Scripts" apretando sobre el boton que tiene un papel con una flechita verde...

y escribe esto:

if (vspeed < 0)
{
   if (left == true) {sprite_index = pon el nombre del sprite saltando arriba a la izquierda}
   if (right == true) {sprite_index = PON Nombre del player saltando arriba a la derecha}   
}

if (vspeed > 0)
{
  if (left == true) {sprite_index = pon el nombre del sprite cayendo abajo a la izquierda}
  if (right == true) {sprite_index = PON Nombre del player cayendo abajo a la derecha}
}

if (!place_free(x,y+1))
{

  if (left == true) {sprite_index = pon el nombre del sprite caminando a la izquierda}
  if (right == true) {sprite_index = PON Nombre del player caminando a la derecha}
}

if (left == true && !keyboard_check(vk_left) && !place_free(x,y+1))
{sprite_index = PON el nombre del sprite parado hacia la izquierda}

if (right == true && !keyboard_check(vk_right) && !place_free(x,y+1))
{sprite_index = PON el nombre del sprite parado hacia la derecha}

HASTA AQUI... pon de Nombre al scripts: Controller P1

Cuando termines, ve al objeto Jugador que hisiste y crea un Step Event, y ve a la lista de acciones "control" y pon "Execute Scripts" que esta al lado del Execute code que has usado... selecciona el scripts que hisiste.. y pon ok... luego prueba el juego y verás que esta bien, si lo hisiste como te dije, te funcionará... Suerte Amigo :D


Por Pregunta sobre este tema o otras dudas que tengas, te hago saber que me llamo Luiber Extrenzas en Facebook, AGREGAME! yo aqui te dejo el Link, cuando quieras, a las ordenes (Y)

https://www.facebook.com/profile.php?id=100008220635391
Título: Re:Si entendes GML encontrá el fallo
Publicado por: vitito93 en Mayo 09, 2015, 01:12:26 PM
Hola amigo, agradezco tu respuesta pero no has modificado mi codigo jaja hiciste un codigo nuevo, y tendria que adaptarlo para mi juego, porque algunas plataformas como el trampolin estan incluidas en ese codigo, la idea es ver porque hace eso de bajar un pixel al pasar el borde de la plataforma
Título: Re:Si entendes GML encontrá el fallo
Publicado por: 3dgeminis en Mayo 09, 2015, 07:40:01 PM
Lo unico que se me ocurre es que la mascara de los objetos no esta "alineada". Digamos que la parte de arriba de la mascara tienen una diferencia de 1 pixel entre ellas aun teniendo el origen de los sprites iguales.

   --------______


Sin el juego no se me ocurre nadamas (la imagen no se puede ver :-[)
Título: Re:Si entendes GML encontrá el fallo
Publicado por: damyrodriiguez en Mayo 10, 2015, 04:55:01 AM
Oye amigo, no es que no entiendamos de GML, sino que cada persona tiene su forma de hacer las cosas, osea hablo de los variables, tu pones variables abreviados y sabes que quisiste poner, pero nosotros no sabemos a que te refieres con esos variables... po ejemplo, yo quiero abreviar health de esta manera "hlh" y tu no sabrías que digo, bueno, asi es como nosotros vemos tu codigo... por eso te hise uno nuevo, intenta adaptarlo, y te será mejor :) saludos
Título: Re:Si entendes GML encontrá el fallo
Publicado por: TLT96 en Mayo 10, 2015, 05:03:19 AM
Cita de: 3dgeminis en Mayo 09, 2015, 07:40:01 PM
Lo unico que se me ocurre es que la mascara de los objetos no esta "alineada". Digamos que la parte de arriba de la mascara tienen una diferencia de 1 pixel entre ellas aun teniendo el origen de los sprites iguales.

   --------______


Sin el juego no se me ocurre nadamas (la imagen no se puede ver :-[)
Nose si la edito pero yo la veo xD

Pues si... mejor que suba un archivo adjunto, ademas no entendi su ejemplo u.u

PD: Eso es de un engine o.O o esta esa cosa en ingles por que si?
Título: Re:Si entendes GML encontrá el fallo
Publicado por: 3dgeminis en Mayo 10, 2015, 05:39:30 AM
Disculpa el ejemplo :-[ Estoy seguro que es problema de las mascaras de colision, te sugeriria que uses mascaras cuadradas o rectangulares para el jugdor y demas objetos de colision.
Título: Re:Si entendes GML encontrá el fallo
Publicado por: vitito93 en Mayo 11, 2015, 01:38:19 AM
Este es el juego, creo que pude solucionar el problema pero no se exactamente como jajajaj

https://www.youtube.com/watch?v=8z0ymF6CHR4