Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: anonimo16 en Diciembre 04, 2015, 06:41:10 PM

Título: (solucionado) Cambiar gravedad
Publicado por: anonimo16 en Diciembre 04, 2015, 06:41:10 PM
 HOLA CGM ;D Anteriormente inicie nuevo tema y gracias a lo que me respondieron me fui guiando y casi lo tengo  :-\ este es el cod que va en el event step de mi pj
Citar//cambiar grav
if keyboard_check_pressed( vk_space ) grav*= -1;{
    if place_meeting(x,y+1,obj_wall){
        if place_free(x,y-1){
            y-=4;
            }
        }
    vsp = clamp( vsp, -10, 10 );
}

y funciona como quiero peeeeero, pasa que cuando estoy en el suelo(obj_wall) salta como loco 4px x,x como hago para que no salte asi? y solo se jale hacia arriba cuando presione space
Título: Re:Cambiar gravedad
Publicado por: jmbs19 en Diciembre 04, 2015, 07:39:00 PM
Cita de: anonimo16 en Diciembre 04, 2015, 06:41:10 PM
HOLA CGM ;D Anteriormente inicie nuevo tema y gracias a lo que me respondieron me fui guiando y casi lo tengo  :-\ este es el cod que va en el event step de mi pj
Citar//cambiar grav
if keyboard_check_pressed( vk_space ) grav*= -1;{
    if place_meeting(x,y+1,obj_wall){
        if place_free(x,y-1){
            y-=4;
            }
        }
    vsp = clamp( vsp, -10, 10 );
}

y funciona como quiero peeeeero, pasa que cuando estoy en el suelo(obj_wall) salta como loco 4px x,x como hago para que no salte asi? y solo se jale hacia arriba cuando presione space

tu problema es que esto:
[gml]
{
        if place_meeting(x,y+1,obj_wall){
            if place_free(x,y-1){
                y-=4;
                }
            }
        vsp = clamp( vsp, -10, 10 );
    }
[/gml]

se esta ejecutando siempre, viendo tu codigo intentaste meter eso dentro de una llave seguido a la condicional de la gravedad, sin embargo esta llave no se ejecutara solo cuando se cumpla, porque eso ya especificaste lo que se cumpliria

[gml]
    //cambiar grav
    if keyboard_check_pressed( vk_space )
    grav*= -1;//lo separe para que vieras mejor, a esto me refiero, lo que sucede cuando se cumpla la condicion es esto
    {//no esto, esto es un bloque de codigo que se ejecuta a cada paso
        if place_meeting(x,y+1,obj_wall){
            if place_free(x,y-1){
                y-=4;
                }
            }
        vsp = clamp( vsp, -10, 10 );
    }
[/gml]

ahora que entiendes tu error aqui esta la solicion para evitar los "brincos":

[gml]
    //cambiar grav
    if keyboard_check_pressed( vk_space )
    grav*= -1;
     if grav = -270//imagino que multiplicas 270 por -1, otra cosa, esto es suponiendo que tienes un codigo que vuelve a 270 positivo otra vez, en caso contrario no dara esos brincos hasta la primera vez que cambies la gravedad, luego dara esos brincos otra vez
    {
        if place_meeting(x,y+1,obj_wall){
            if place_free(x,y-1){
                y-=4;
                }
            }
        vsp = clamp( vsp, -10, 10 );
    }



[/gml]
Título: Re:Cambiar gravedad
Publicado por: anonimo16 en Diciembre 04, 2015, 08:04:52 PM
Cita de: jmbs19 en Diciembre 04, 2015, 07:39:00 PM
Cita de: anonimo16 en Diciembre 04, 2015, 06:41:10 PM
HOLA CGM ;D Anteriormente inicie nuevo tema y gracias a lo que me respondieron me fui guiando y casi lo tengo  :-\ este es el cod que va en el event step de mi pj
Citar//cambiar grav
if keyboard_check_pressed( vk_space ) grav*= -1;{
    if place_meeting(x,y+1,obj_wall){
        if place_free(x,y-1){
            y-=4;
            }
        }
    vsp = clamp( vsp, -10, 10 );
}

y funciona como quiero peeeeero, pasa que cuando estoy en el suelo(obj_wall) salta como loco 4px x,x como hago para que no salte asi? y solo se jale hacia arriba cuando presione space

tu problema es que esto:
[gml]
{
        if place_meeting(x,y+1,obj_wall){
            if place_free(x,y-1){
                y-=4;
                }
            }
        vsp = clamp( vsp, -10, 10 );
    }
[/gml]

se esta ejecutando siempre, viendo tu codigo intentaste meter eso dentro de una llave seguido a la condicional de la gravedad, sin embargo esta llave no se ejecutara solo cuando se cumpla, porque eso ya especificaste lo que se cumpliria

[gml]
    //cambiar grav
    if keyboard_check_pressed( vk_space )
    grav*= -1;//lo separe para que vieras mejor, a esto me refiero, lo que sucede cuando se cumpla la condicion es esto
    {//no esto, esto es un bloque de codigo que se ejecuta a cada paso
        if place_meeting(x,y+1,obj_wall){
            if place_free(x,y-1){
                y-=4;
                }
            }
        vsp = clamp( vsp, -10, 10 );
    }
[/gml]

ahora que entiendes tu error aqui esta la solicion para evitar los "brincos":

[gml]
    //cambiar grav
    if keyboard_check_pressed( vk_space )
    grav*= -1;
     if gav = -270//imagino que multiplicas 270 por -1, otra cosa, esto es suponiendo que tienes un codigo que vuelve a 270 positivo otra vez, en caso contrario no dara esos brincos hasta la primera vez que cambies la gravedad, luego dara esos brincos otra vez
    {
        if place_meeting(x,y+1,obj_wall){
            if place_free(x,y-1){
                y-=4;
                }
            }
        vsp = clamp( vsp, -10, 10 );
    }



[/gml]

me funciono, pero al apretar space no me jala al jugador hacia arriba:s tengo que saltar para que se note que la gravedad cambio
Título: Re:Cambiar gravedad
Publicado por: jmbs19 en Diciembre 04, 2015, 08:46:55 PM
ok, mira vi el mensaje que borraste con el codigo completo, me di cuenta que tu grav no es la "gravedad" que trae el gm por defecto, sino que es un valor que se le resta o suma a la y.

por eso es que no te sirve el codigo que pase. solo cambia la condicion de esta manera:
[gml]
//cambiar grav
    if keyboard_check_pressed( vk_space )
    grav*= -1;
     if grav < 0//ahora ya que a grav se le multiplica por -1 entonces grav tiene un valor menor a 0 es decir negativo. por eso ahora con esta condicion deberia de funcionar, como dije anteriormente este codigo solo funcionara si y solo si despues vuelves a poner el grav en 0 o mayor a 0, si no lo haces despues del primer cambio de gravedad empesara a dar brincos.
    {
        if place_meeting(x,y+1,obj_wall){
            if place_free(x,y-1){
                y-=4;
                }
            }
        vsp = clamp( vsp, -10, 10 );
    }
[/gml]
Título: Re:Cambiar gravedad
Publicado por: anonimo16 en Diciembre 04, 2015, 11:43:41 PM
y para voltear el sprite? seria con
if !move=0 image_yscale = move; ???
Título: Re:Cambiar gravedad
Publicado por: jmbs19 en Diciembre 05, 2015, 12:04:59 AM
Cita de: anonimo16 en Diciembre 04, 2015, 11:43:41 PM
y para voltear el sprite? seria con
if !move=0 image_yscale = move; ???

2 cosas:

1)¿resolviste el problema original?
2)las reglas dicen:
CitarHaced sólo una pregunta en cada tema: los temas con más de una pregunta, sobre todo si éstas no están relacionadas entre si, se acaban desviando y nunca se llega a nada.

y tambien dicen:
CitarBuscar antes de preguntar: Utilizad la herramienta "buscar" para aseguraros de que vuestra duda no ha sido resuelta con anterioridad. Si no sabéis cómo se utiliza esta herramienta, contactad con el staff a través de los mensajes privados y estaremos encantados de responder a vuestras dudas.

http://www.comunidadgm.org/preguntas-y-respuestas/preguntas-y-respuestas-que-es-y-como-funciona-leer-antes-de-postear/

entonces, como todavia eres nuevo en el foro te recuerdo que hay un buscador.

volviendo al tema, tomando en cuenta que tu pregunta sobre como voltear el sprite es otra pregunta te la respondo asi:

[gml]
image_yscale=-1//esto pone de cabeza el sprite
image_yscale= 1//esto la pone normal
[/gml]

dentro del codigo que te pase yo lo pondria aqui:

[gml]
//cambiar grav
    if keyboard_check_pressed( vk_space )
    {
      grav*= -1;
     switch (image_yscale)//aqui, porque solo se voltearia cuando se cambia la gravedad, pero en tu codigo donde lo devuelve a la normalidad.
     case -1:
     image_yscale=1;
     break;
     case 1:
     image_yscale=-1;
     break;
    }
     if grav < 0
    {
        if place_meeting(x,y+1,obj_wall){
            if place_free(x,y-1){
                y-=4;
                }
            }
        vsp = clamp( vsp, -10, 10 );
    }

[/gml]
Título: Re:Cambiar gravedad
Publicado por: anonimo16 en Diciembre 05, 2015, 01:26:38 AM
Gracias y disculpa, si se soluciono lo de la gravedad ahorita le pongo (solucionado) al tema, y con lo de image_scale me da error en "case = -1:" me sale en rojo esa linea
In object obj_player, event Step, action 1 at line 56: Symbol { expected.
Título: Re:Cambiar gravedad
Publicado por: jmbs19 en Diciembre 05, 2015, 02:04:08 AM
si copiaste y pegaste el codigo fue un error mio, ya lo edite, habia puesto image_yscala en vez de image_yscale.

sin embargo no entiendo esto
Cita de: anonimo16 en Diciembre 05, 2015, 01:26:38 AM
con lo de image_scale me da error en "case = -1:" me sale en rojo esa linea
In object obj_player, event Step, action 1 at line 56: Symbol { expected.
pusiste "case =-1:"?

el case no es una igualdad o variable, es una funcion basica de programacion que trabaja conjuntamente con el switch, la manera correcta de escribira es "case -1:" y esto tendria que terminarse con un break; en cada case.
recuerda:

switch (<variable>)
case <valor de variable 1>:
{<accion 1>};
break;
case <valor de variable 2>:
{<accion 2>};
break;
case <valor de variable n>:
{<accion n>};
break;
Título: Re:Cambiar gravedad
Publicado por: anonimo16 en Diciembre 05, 2015, 02:40:53 AM
Cita de: jmbs19 en Diciembre 05, 2015, 02:04:08 AM
si copiaste y pegaste el codigo fue un error mio, ya lo edite, habia puesto image_yscala en vez de image_yscale.

sin embargo no entiendo esto
Cita de: anonimo16 en Diciembre 05, 2015, 01:26:38 AM
con lo de image_scale me da error en "case = -1:" me sale en rojo esa linea
In object obj_player, event Step, action 1 at line 56: Symbol { expected.
pusiste "case =-1:"?

el case no es una igualdad o variable, es una funcion basica de programacion que trabaja conjuntamente con el switch, la manera correcta de escribira es "case -1:" y esto tendria que terminarse con un break; en cada case.
recuerda:

switch (<variable>)
case <valor de variable 1>:
{<accion 1>};
break;
case <valor de variable 2>:
{<accion 2>};
break;
case <valor de variable n>:
{<accion n>};
break;


mira :s

(http://imageshack.com/a/img907/2646/jUygtE.jpg)
Título: Re:Cambiar gravedad
Publicado por: jmbs19 en Diciembre 05, 2015, 03:20:57 AM
Cita de: anonimo16 en Diciembre 05, 2015, 01:26:38 AM
In object obj_player, event Step, action 1 at line 56: Symbol { expected.

eso me indica que el problema es que el bloque de cases no esta dentro de unas llaves.
asi que ponlas. a mi no me habia pasado antes, pero si te pide las llaves ponlas.
[gml]
//cambiar grav
    if keyboard_check_pressed( vk_space )
    {
      grav*= -1;
     switch (image_yscale)
          {//poner una llave aqui
            case -1:
            image_yscale=1;
            break;
            case 1:
            image_yscale=-1;
            break;
          }//y aqui
    }
     if grav < 0
    {
        if place_meeting(x,y+1,obj_wall){
            if place_free(x,y-1){
                y-=4;
                }
            }
        vsp = clamp( vsp, -10, 10 );
    }

[/gml]