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 - LowHertzs

46
Cita de: penumbra en Agosto 03, 2014, 09:08:29 PM
El INI no tiene manera de saber qué uso se le va a dar a los datos que se guardan en sus claves. Eso sólo lo sabe el programador. Lo único que se puede hacer es darle nombres descriptivos a las claves para tener una idea de qué información contienen, pero eso realmente no importa, cualquier valor de cualquier clave del ini se puede usar en donde sea. o único que tienes que hacer es

[gml]x = ini_read_real("posicion","player_x", x);[/gml]

y no necesariamente en STEP, puede ser en CREATE, el jugador necesita leer al menos una vez la posición desde el ini, con una sóla vez es suficiente, después ya es cuestión del jugador moverlo a donde se quiera. Es desaconsejable leer recurrentemente el INI en STEP, esto crea problemas de rendimiento.

Despues de esto si funciona correctamente.

Pero para aclararme el concepto, entonces lo que yo había puesto anteriormente solo era la acción de guardar los datos de la posición en el archivo ini y al iniciar leerlos, lo que me faltaba era que el personaje ejecutase dicho cambio de leerlo y ir a esa posición (por así llamarlo), ¿no?

Y gracias!, la verdad que le he dado muchas vueltas a la guía y cuesta a veces dar con lo que buscas y más aún si el nivel del que partes es nulo y intentas profundizar en gml.

***MODIFICO***
Ahora tengo problemas al cambiar de room, puesto que al estar el "proceso" de lectura y aplicación de los datos de posición en create cada vez que se crea un nuevo objeto coge los datos escritos anteriormente, y no se adecua a la room.

Aun no lo probé, pero supongo que para esto lo mejor es crear una variable global, llamada por ejemplo "carga" con valor 0, y que solo cuando pulses el botón de carga del menu se active, de esta manera solo lee los datos al cargar desde el menu y no continuamente cada vez que crea el objeto.

Había pensado en algo como esto:
if
cargando = 1
{
ini_open("mazmorra.ini");
x = ini_read_real("posicion","player_x", x);
y = ini_read_real("posicion","player_y", y);
load = 0;
ini_close();
}


¿Es lo más correcto?.
47
Cita de: penumbra en Agosto 03, 2014, 08:54:56 PM
¿Qué código usas y en qué evento asignas el valor de player_x a la variable x?

Por si solo,[gml]ini_read_real("posicion","player_x", x);[/gml]  no asigna el valor leído a ninguna variable.

Entonces estoy realmente perdido, yo pensaba que este codigo guardaba en el archivo ini bajo la seccion [posicion] la localizacion del "player_x" al valor X, pero ya veo que estoy totalmente equivocado.

En ese caso debería de crear una variable en step, que escriba el x y el y del jugador en cada momento, es a eso a lo que te refieres?
48
Mi problema está en que no lee los datos que guardo en el .ini

Para guardar la posición de mi personaje estoy usando en el evento room_end esto:
ini_write_real("posicion","player_x", x);
ini_write_real("posicion","player_y", y);


Y para cargarlo desde el botón del menú estoy usando esto:
ini_read_real("posicion","player_x", x);
ini_read_real("posicion","player_y", y);


La cuestión es que si busco el .ini la posición del jugador se escribe correctamente al salir del juego:
[posicion]
player_x=320.000000
player_y=376.000000


Pero cuando entro vuelvo a salir en otro sitio.
49
Cita de: Maximo en Agosto 02, 2014, 05:34:03 PM
Citarlo que no entiendo es por qué los mata de un golpe
creo que el problema está en
if (sprite_index = spr_player_golpe)
esto hace que cada steep que el jugador tenga el sprite spr_player le quite hp al enemigo
Si el sprite "spr_player_golpe" tarda más de 1 steep, por ejemplo, imagínate que tarda 10 steps, quitará 10 hp del enemigo

Vale, ahora lo capto, voy a probar a hacerlo de otra manera y comento.

Gracias por vuestra ayuda!.

Era justamente eso, ya lo solucioné añadiéndolo a un evento "release key", gracias!.
50
Cita de: Guacusio en Agosto 02, 2014, 05:06:56 PM
No has indicado en qué evento llamas al script. Puede que tu error sea llamarlo en el evento step. Por otra parte, este código:

obj_enemy_flame.hp -=1;

precisamente afecta a todas las instancias del objeto obj_enemy_flame. ¿Tienes clara la diferencia entre un objeto y una instancia?

Debo de tener una idea poco clara, las instancias desde el poco conocimiento de gm que tengo son propiedades de los objetos no?

Y respecto al otro mensaje de @Maximo tenías razón, me había liado con la guía de GM, y pensaba que tenia que definir el objeto también entre los corchetes, pero claro de esa manera pierde totalmente el sentido, ahora si funciona perfectamente, lo que no entiendo es por qué los mata de un golpe. Supongo que habría que definir que es un valor "relativo" para que no ponga el valor del hp del enemigo en -1 de golpe, si no que vaya restando al valor que ya tiene. Pero no sé como definir relativo en código. Según la guía nada más ponerlo ya es relativo.
51
Yo quiero restarle vida a un objeto desde el mismo script:

En ese caso quedaría así:

if (sprite_index = spr_player_golpe)
    {
    target = instance_nearest(x, y, obj_enemy_flame)
    if (distance_to_object(target) <= 32)
        {
        obj_enemy_flame.hp -=1;
        }
    }

Pero tampoco funciona correctamente.

Porque en cuanto le pego al enemigo un golpe que supuestamente como puse en el codigo resta -1 y el enemigo tiene 6, muere de un golpe.

Además que si pongo varios enemigos repetidos, en cuanto le doy a uno, mata a todos.
52
Hola makeros! quiero hacer uso de un script, para que cuando golpee, si el enemigo está "cerca" le quite vida, y si no lo está no le quite nada. La cuestión es que no me funciona, desde el script no se baja la vida del enemigo. Y me salta ERROR para obtener la variable "hp" del "obj_enemy_flame". Este es el código que estoy usando.

if (sprite_index = spr_player_golpe)
    {
    target = instance_nearest(x, y, obj_enemy_flame)
    if (distance_to_object(target) <= 32)
        {
        hp -=1;
        }
    }


Quiero hacerlo con el uso de script, NO QUIERO USAR EL "CHECK COLLISION", puesto que solo quiero que le pueda quitar vida si está pulsando la tecla "F" y no solo con acercarse.

Este es el error que me salta, como si no puede detectar la variable global hp del bicho en cuestión.
___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of  Step Event0
for object obj_player:

Push :: Execution Error - Variable Get -1.hp(100003, -2147483648)
at gml_Script_scr_player_golpe_state (line 6) -         hp -=1;
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_scr_player_golpe_state (line 6)
called from - gml_Object_obj_player_StepNormalEvent_1 (line 7) -         scr_player_golpe_state();
53
Estoy intentando hacer que funcione por partes para luego añadir el resto, y así hacerlo algo más llevadero.

Para empezar en el boton de "cargar partida" del menu he puesto lo siguiente:
ini_open("mazmorra.ini");
var room_load = ini_read_real("mazmorra","room",0)
if (room_load == 0)
      room_goto(mazmorras_01)
else
      room_goto(room_load)
ini_read_real("mazmorra","player_x", x);
ini_read_real("mazmorra","player_y", y);


Lo dejé casi igual a como me lo diste tú, y solo le añadí que leyese también la posición del "jugador".

Y luego, en el "obj_player" en el evento "Game End" (para no hacer uso del "Game Start" porque tienes razón, no tiene mucho sentido) he puesto lo siguiente:
ini_open("mazmorra.ini");
if (room != mazmorras01) { ini_write_real("mazmorra","room",room); }    //Guardar la habitación siempre y cuando no se esté en la habitación del menu
ini_write_real("mazmorra","player_x", x);
ini_write_real("mazmorra","player_y", y);
ini_close();


Que se supone que debería de abrir el archivo mazmorra.ini, y aquí puse que si la room es "mazmorras_01" que es el primer nivel de mi juego lo escriba en el archivo ini. (Si no recuerdo mal se debía de poner una linea igual que esa por cada nivel, para que así se vaya guardando siempre la última, corrígeme si me equivoco.
Y también añadí que guarde la posición del jugador con el:  ini_write_real("mazmorra","player_x", x);
ini_write_real("mazmorra","player_y", y);


Al archivo .ini lo añadí en "included files" con el siguiente texto dentro:
[mazmorra]
room = mazmorras_01


Pero no me acaba de funcionar, actualmente me guarda la ultima room en la que he estado, pero la posición del personaje no, quizás estoy liandola en algún paso. Voy a seguir dándole vueltas a ver si saco que puede ser.

**MODIFICO**
Dándole vueltas ya he conseguido guardar distintas variables en el .ini, como cuando coges un objeto, se guarde que ya lo has cogido y no salga más etc, hasta aquí si consigo hacerlo funcionar aunque tengo mis dudas. ¿Esta es la mejor manera para hacer estas acciones? ¿No saturarán la memoria al poner muchos valores en el ini?.

Ahora lo que me falta es conseguir guardar la posición del "obj_player" cada vez que sale de la partida, y cargarlo desde el botón del menú. Pero por lo que he visto en ejemplos etc, hay varias maneras de hacerlo y estoy muy confundido.
54
Cita de: penumbra en Agosto 01, 2014, 10:20:15 PM
Más bien es al revés. Es bastante posible detectar con qué versión y licencia está hecho un juego si el creador del IDE así lo quiere. Lo que es más difícil es ponerse a revisar juego tras juego para saber en qué IDE fue desarrollado

Si pones un juego en la PlayStore a no ser que tengas el exito del flappy bird dudo que vayan a buscarlo, o que tengan tanto tiempo libre para buscarlo, además de eso, si la pones de pago, van a pagar para ver con que licencia está creado? Yo lo veo todo demasiado improbable no sé, seguramente no tenga razón me parece darle demasiada importancia.
55
Yo tengo también la versión pagada (aproveché la oferta) pero tengo mis dudas respecto a eso de que te puedan "pillar" si subes un juego con la versión pirata.

Desconozco el tema por completo, pero desde la ignorancia me atrevo a decir que es imposible que detecten si tu juego está hecho con o sin una versión pirata.

Pero obviamente es mejor que lo compres, tanto por la seguridad, como por la asistencia (soporte) y las actualizaciones, que dudo que la versión pirata las tenga.
56
Cita de: penumbra en Agosto 01, 2014, 09:39:18 PM
¿En qué eventos usas tanto la escritura como la lectura del ini?

Mi idea es poner el evento de carga en un boton en el menú principal, solo accesible desde dicho menu.

Y el evento de carga en el (room start), no se me ocurrió mejor forma.

if
ini_read_real("mazmorra","room",0) = 0
{
ini_close();
exit;
}


Con esto mi intención es leer en el archivo "mazmorra.ini" la ultima "room" en la que se ha situado el personaje. Y cargarlo desde ahí. El problema es, que no sé como hacer tampoco que si no hay una partida guardada (por ejemplo) automáticamente vaya a la room1.
57
Preguntas y respuestas / Guardar y cargar partida .INI
Agosto 01, 2014, 09:36:45 PM
Hola makeros! vengo con algo que puede parecer muy básico pero a mi me está volviendo loco. Antes de que me digáis que mire la guía os aseguro que la tengo más que vista, pero no capto algunas cosas.

Lo que busco es muy simple, un sistema de cargar y guardar partida automáticamente en .ini, lo que quiero es que guarde la room ultima en la que llegó a estar el personaje, que tambien guarde ciertas variables, es decir si consigo una llave en una room que en otra se desbloquee la puerta, la vida, y la posición del jugador. Tan solo quiero que guarde eso.

Voy a intentar poneros (con la guia de gm:s en la mano lo que yo pondría, pero me faltan muchas cosas que no consigo entender, a ver si me podéis orientar).

Para que guarde la partida:
ini_open("mazmorra.ini");
ini_write_real("mazmorra","room",room);
ini_write_real("mazmorra","vida",vida);
ini_write_real("mazmorra","player_position",player_position);
ini_write_real("mazmorra","door1",closed);
ini_write_real("mazmorra","door2",closed);
ini_close();


Y para que cargue:
ini_open("mazmorra.ini");
if
ini_read_real("mazmorra","room",0) = 0
{
ini_close();
exit;
}
room_goto(ini_read_real("mazmorra","room",0));
vida = ini_read_real("mazmorra","vida",0);
player_position = ini_read_real("mazmorra","player_position",player_position);
door1 = ini_read_real("mazmorra","door1",0);
door2 = ini_read_real("mazmorra","door2",0);
ini_close();


Pero la verdad, que no sé como especificar cada cosa. Y no me funciona de ninguna de las maneras. A ver si alguien me puede orientar.

Gracias!
58
Cita de: penumbra en Julio 24, 2014, 08:04:28 AM
Cita de: LowHertzs en Julio 24, 2014, 12:28:54 AM
En el primer post, intenté explicar eso.

Es cierto, disculpa, pensé que agregabas image_speed en otro evento.

Lo único que se me ocurre que pueda pasar son dos cosas

1. Estás usando el código en un objeto que no corresponde (sé que esto es poco probable, pero sin ver el proyecto es una posibilidad)
2. El objeto es el correcto, pero por alguna razón, la instancia no tiene asociado un sprite_index adecuado o se asocia siempre el mismo sprite

Recordar que sprite_index  e image_speed son variables de instancia. Si la instancia tiene o no un sprite asignado correctamente se puede saber mediante el debugger e imprimiendo la variable sprite_index en pantalla. Por ejemplo, el valor dibujado con draw_text (50, 50, sprite_index) debe coincidir con el valor guardado en el arreglo. Lo que no recuerdo es si una instancia sin sprite asociado tiene un sprite_index de 0 o -1 (creo que sería -1, pero no recuerdo)

En las propiedades del objeto jugador, ¿le has asignado un sprite al objeto? Quizás no, porque tienes el arreglo sprite[]. Si resulta que el objeto jugador no tiene un sprite asociado, querría decir que por algun motivo esto esta fallando

if (xDirection != 0 || yDirection != 0) {
    sprite_index = sprite[xDirection + 1, yDirection + 1];
}


¿Qué pasa si en CREATE le asignas un sprite index directamente (sólo para probar) a la instancia?

EDITADO:
3 ¿Tienes algún código en DRAW del objeto jugador? ¿Hay algún otro objeto (aparte del jugador) que dibuje en pantalla?

Tenías razón el fallo estaba en otro evento Draw, el cual bloqueaba la animación del player. (Despistes de iniciado)

Gracias a todos!.
59
No creo que sea un fallo gráfico, seguramente estás creando el objeto en una nueva posición repetidas veces, pero como dice mi compañero si pudieras subir el juego para echarle un vistazo o que pongas partes del código a ver si podemos ver donde está el fallo es muy difícil determinar que pueda ser.

**Por cierto te recomiendo que en "Icono del mensaje" edites el post y pongas el de GMS, para que más gente que use esta versión pueda ayudarte.
60
Cita de: penumbra en Julio 23, 2014, 09:19:38 PM
¿Pero... en qué parte del código especificas la velocidad de la animación? ¿En qué evento? No hay ningún mage_speed = 0.15 en el código que pusiste

En el primer post, intenté explicar eso.

En el evento create del personaje, mi idea era poner esto para solucionarlo:
// sprite directions
sprite[0,0] = spr_northwest;
sprite[0,1] = spr_west;
sprite[0,2] = spr_southwest;
sprite[1,0] = spr_north;
sprite[1,2] = spr_south;
sprite[2,0] = spr_northeast;
sprite[2,1] = spr_east;
sprite[2,2] = spr_southeast;

//velocidad
image_speed = 0.15;


Pero aún poniéndolo así no funciona, mi pregunta es si la ejecución que estoy haciendo es la correcta. Si lo es, no entiendo que puede estar fallando el juego no tiene absolutamente nada más.

(Lo siento por mi vaga explicación, no se como detallar más..)