Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - jmbs19

121
Preguntas y respuestas / Re:Cambiar gravedad
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;
122
Preguntas y respuestas / Re:Cambiar gravedad
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]
123
te diria que usaras un xplode usando " " como divisor, pero lo veo dificil en el caso de las comas, script de xplode hay varios en el foro, pero no se me ocurre una manera de separar tambien las "," de las palabras.
124
Preguntas y respuestas / Re:Cambiar gravedad
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]
125
Preguntas y respuestas / Re:entero demasiado grande!
Diciembre 04, 2015, 08:03:44 PM
Cita de: kostra en Diciembre 04, 2015, 03:53:03 PM
aquí solo leo chino jajaja xD no me entero xD

Guacusio, puedes porfavor, explicarme eso de la ds_list?

e aqui mi código, no me lo roben, estoy haciendo un asset xD
[gml]///ascii_to_bin(string)
//Script by MHP Labs
outfinal = "";
for (i=1;i<=string_length(argument0);i++)
{
    out = "";
    cout = 0;
    in = 0;
    char = string_char_at(argument0,i);
    in = ord(char); //97
    while (in > 1)
    {
        bin[cout] = in mod 2;
            in = in div 2;
        cout++;
    }
    cout--;
    while (cout > 0)
    {
        out += string(bin[cout]);
        cout--;
    }
    out += string(in);
    outfinal += string(out);
}
return(real(outfinal));[/gml]

no entiendo la necesidad de convertir un codigo ascii a binario, pero pensando en tu problema que te pareceria un array o un ds_map?(ojo, si usas array asegurate de que indique tambien la cantidad total de datos, podrias reservar la posicion array[0], ya que no la usas, para guardar la longitud del array)

[gml]///ascii_to_bin(string)
//Script by MHP Labs
//outfinal = ""; esto no es necesario que lo declares ya que esto lo crearas mas adelante y no es una condicional, ademas lo necesitas como array.
contador=string_length(argument0);//te lo pongo asi para poder usar esta variable otra vez, ademas no creo que sea muy eficiente calcular a cada paso del for la longitud del string, ya que este no cambiara.
for (i=1;i<=contador;i++)
{
    out = "";
    cout = 0;
    in = 0;
    char = string_char_at(argument0,i);
    in = ord(char); //97
    while (in > 1)
    {
        bin[cout] = in mod 2;
            in = in div 2;
        cout++;
    }
    cout--;
    while (cout > 0)
    {
        out += string(bin[cout]);
        cout--;
    }
    out += string(in);
    outfinal= string(out);//ya que empiesas tu conteo en i=1 el array outfinal[0] esta vacio.
}
outfinal[0]= contador;//lo pongo aqui, pero tambien puede estar al principio del codigo
return(real(outfinal));[/gml]
hey si lo publicas no olvides los creditos a todos  :D

ps: no revise tu codigo completamente, solo te modifique lo que pediste.
126
Preguntas y respuestas / Re:Cambiar gravedad
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]
127
que te parece si tu codigo que cambia direccion y velocidad,imagino dentro del evento colision lo metes dentro de un condicional?

algo como esto

[gml]
//dentro del create
colisionado = 0
//en el evento colision con la barra
if colisionado = 0
{
//tu codigo
colisionado = 1
alarm[0]=30//pongo 30 pasos, pero pueden ser menos o mas, eso depende de lo que tu pienses que quede mejor, este es por decirlo asi, el tiempo minimo entre rebotes contra la barra
}
//dentro de la alarm[0]
colisionado = 0//reseteamos para que pueda volver a golpearse con la barra
[/gml]
128
Preguntas y respuestas / Re:pregunta, escribir en el juego
Noviembre 28, 2015, 06:20:13 PM
dentro de la variable keyboard_string puedes escribir y borrar como si estuvieras escribiendo en cualquier editor de texto.

[gml]
//suponiendo que tengo un activador dentro den un objeto que escriba, para que solo se escriba en el cuando esta activado
//en el step
if activado = 1
text = keyboard_string
//dentro de la accion de desactivar/activar, preferentemente una sola ejecucion, por ejemplo al presionar enter
switch (activado)
case 1:
activado = 0;
keyboard_string = "";//limpiamos para futuras escrituras, esto seria si por ejemplo tenemos varios objetos en los que se escriba
break;
case 0:
activado = 1
keyboard_string = text;//para que no se borre lo que ya escribimos
break;
[/gml]
129
Preguntas y respuestas / Re:pregunta, escribir en el juego
Noviembre 28, 2015, 04:10:30 PM
Cita de: kostra en Noviembre 28, 2015, 03:59:48 PM
en create: text = "";
en evento press any key: text += keyboard_lastchar;


lo que no sé cómo borrar, dale guacusio, tú si sabeh, que yo lo seh xD :B

la variable keyboard_string guarda tanto el borrado como la escritura, tambien puedes asignarle un valor(string), la cuestion seria jugar con esta variable, por ejemplo, cuando le des al campo para escribir que borre el keyboard_string y coloque en ella lo que se encontraba en el campo de escritura, esa variable es muy util, solo hay que ponerse a invertar XD
130
ok, ya que dejamos en claro lo de España y españa te dire lo siguiente, si tu estas haciendo un get_string("pregunta","") que apenas le das enter lo vuelve a abrir, el problema no es el get_string, es el codigo a su alrededor, si pones un get_string dentro de step sin ninguna condicion te saldra paso a paso por siempre, si hiciste la condicion mal tambien.

prueba lo siguiente:

[gml]
//dentro de cualquier evento aparte del step, te recomiendo en el create o en una tecla
respuesta=get_string("nombre del planeta donde vives","")
if respuesta = "tierra" or respuesta ="Tierra"
show_message("correcto")
else
show_message("respuesta incorrecta, o es que eres alienigena XD")
[/gml]
131
te recuerdo que las mayusculas y minusculas afectan, "españa" no es igual a "España".
132
este codigo esta mal
[gml]
if global.puntuacion = 1
    {           
        while(1)
        {
            global.respuesta = get_string("¿Donde vives?","");
            if string_length(global.respuesta) <= 20
            break;//este break no deberia de estar aqui, porque rompe el codigo, si quieres que solo se ejecute el siguiente if si es verdadero deberias de poner aqui ese if
                else
            show_message("Respuesta muy larga")

            if global.respuesta = "España" {global.puntuacion = +1};
        }
    }
[/gml]

la manera de hacer esto seria:

[gml]
if global.puntuacion = 1
    {           
        while(1)
        {
            global.respuesta = get_string("¿Donde vives?","");
            if string_length(global.respuesta) >= 20//si es mayor a 20
                {
                  show_message("Respuesta muy larga")//ejecuta esto
                }
            else
                {
                  if global.respuesta = "España" {global.puntuacion = +1};//sino ejecuta esto
                }
        }
    }

[/gml]

deje lo del while porque no se como sera tu codigo final, pero hay tienes como deberia de ser el codigo basado en lo que tu diste
133
pero con una inclinacion de 45 grados la pendiente si no me equivoco seria 1, a partir de eso seria mas facil, si tu personaje se mueve normalmente de izquierda a derecha seria como poner

[gml]
if place_meeting(x,y,objRampa_izq)//de izquierda abajo a derecha arriba
{
  if place_free(x+3,y-3) && keyboard_check(vk_right)
  {
    x +=3;
    y -=3;
  }
}

if place_meeting(x,y,objRampa_izq)//de izquierda abajo a derecha arriba
{
  if place_free(x-3,y+3) && keyboard_check(vk_left)
  {
    x -=3;
    y +=3;
  }
}

if place_meeting(x,y,objRampa_der)//de izquierda arriba a derecha abajo
{
  if place_free(x+3,y+3) && keyboard_check(vk_right)
  {
    x +=3;
    y +=3;
  }
}

if place_meeting(x,y,objRampa_izq)//de izquierda arriba a derecha abajo
{
  if place_free(x-3,y-3) && keyboard_check(vk_left)
  {
    x -=3;
    y -=3;
  }
}
[/gml]

por supuesto esto no abarca los brincos, si por ejemplo brinca y cae en una rampa, sin embargo creo que eso se podria hacer con colisiones o algo asi
134
si lo que quieres es que cuando el jugador se debuelva no salga al mismo room, eso lo haces haciendo que el cambio de room sea aleatorio,como dice kostra, pero si lo que quieres es que un room no se repita nunca ya eso es otra historia, estariamos hablando de un generador de niveles y eso si es mas complicado.
135
kostra tu game maker esta embrujado XD, ya enserio, eso es raro, seria que nos puedes enviar un par de capturas para ver eso? quizas tengas esa variable declarada en el osure antes del codigo que pasaste. sin embargo eso no explicaria que, segun tu, la variable si se esta pasando desde el primer obj al ultimo.