Makero Samigabacho:


  Por lo que necesitas de realizar acciones en ciertos momentos, te recomiendo que leas algo sobre los "time lines". Aun que no hay nada que no se pueda hacer con las "alarms".

  En la página de "yoyogames", en la sección de "tutoriales" hay un "tutorial" muy completo paso a paso sobre como hacer un juego "shooter". En dicho "tutorial" tocan elementos como los "time lines", "alarms" y otros muy necesarios para comprender y dominar el GM. Claro, ellos asumen que pasaste el primer "tutorial".

  Mi recomendación es que sigas el "tutorial", si no tienes problemas con el inglés, y verás que muchas de esas preguntas estarán más que respondidas.   :D

   Link a yoyogames: aquí 

  Disculpa la demora en la respuesta...  ;D 


#16 Septiembre 28, 2012, 05:14:30 PM Ultima modificación: Septiembre 28, 2012, 07:08:39 PM por ferhand
  Saludos makero Samigabacho:


  Disculpa la demora.  :-[

   Acá te dejo un "script" para cargar todo un fichero de BD creado con el "GM Database Support". Para que funcione solo lo debes llamar y pasarle como argumento una cadena de caracteres compuesta por el nombre del fichero y su extensión.  Por ejemplo: "basedatos.txt"

Luego, en el objeto desde el cual llamas al "script", se crean unos "arrays":
* Un "array" bidimensional, cuyo nombre es el argumento pasado al "script", que contiene información de todas las tablas de la forma:
  basedatos.txt[0,0] = cantidad total de tablas,  [0,1] = nombre de tabla,  [0,2] = cantidad total de filas, [0,3] = cantidad total de columnas
[1,0]= nada, [1,1] = nombreTabla_1, [1,2] = 6, [1,3] = 2,
[1,0]= nada, [1,1] = nombreTabla_2, [1,2] = 4, [1,3] = 5,
[1,0]= nada, [1,1] = nombreTabla_3, [1,2] = 3, [1,3] = 10,

* Un "array" bidimensional para cada tabla. El nombre de este "array" es el nombre de la tabla, por ejemplo: "nombreTabla_1[2,1]", de la forma:

nombreTabla_1[0,0] = nada, [0,1] = nombre_columna_1, [0,2] = nombre_columna_2, [0,3] = nombre_columna_3
[1,0] = nombre_fila_1, [1,1] = valor, [1,2] = valor, [1,3] = valor,
[2,0] = nombre_fila_2, [2,1] = valor, [2,2] = valor, [2,3] = valor,
[3,0] = nombre_fila_1, [3,1] = valor, [3,2] = valor, [3,3] = valor,


Puedes aceder a los nombre de cada tabla, la cantidad de columnas y filas en el primer "array". Los nombres de cada fila, columna, así como sus valores en lños "arrays" creados para cada tabla.

Parece complicado, pero es sencillo una vez lo comprendes. Tienes todo organizado y listo para usarse.

Esta versión del "script" solo carga fichero sin encriptar, la hice ayer por la tarde. El Lunes te traigo la de "guardar" y luego le agregamos la función de "enciptar - desencriptar".

  Cualquier duda pregunta. No estaré el fin de semana, pero el Lunes nos podemos ver (escribir.)  :-[

Disculpa por las molestias causadas y hasta la próxima.  ;D   

Edito:  Se me olvidaba el adjunto. Suerte que Mgbu me lo recordó... :-[ 


Guau!!!
Me dejáis con la boca abierta... muchas gracias compañeros ferhand y Mgbu por vuestra disponibilidad y rapidez.
Dejadme un tiempo para ver si entiendo el código (a fin de progresar en mi instrucción en GML) que seguro regresaré con alguna duda :D
Gracias de nuevo y buen fin de semana!

  Saludos makero Samigabacho:

  No te preocupes por este código. Primero aprende el código básico general, que es más fácil, luego con una breve explicación entenderás este...   ;D

PD: te puse los "scripts" en el mensaje anterior..


#19 Octubre 01, 2012, 11:04:44 AM Ultima modificación: Octubre 01, 2012, 11:24:28 AM por Samigabacho
Hola amigos, aquí vuelvo a la carga...:D
he mirado los dos script que me habéis dejado y creo que son más o menos lo mismo.
Al hacer la primera prueba para ver si me funcionaba me he topado con el siguiente mensaje de error:

Citar___________________________________________
ERROR in
action number 1
of Other Event: Game Start
for object Info:

In script scr_guardar2:
Error in code at line 60:
           for(i=1; i <= variable_global_array2_get(string(argument0),0,0); i+=1)  // Para cada tabla...
                         ^
at position 24: Cannot compare arguments.
A ver si doy con la tecla...
¿podrías ser porque la variable array2 no está inicializada? aunque creo haber leído que en GML no hace falta inicializar variables no?

EDITO: El que me ha dado error es el facilitado por el compañero ferhand pero he probado el facilitad por Mgbu y ha corrido sin problema.

  Saludos makero Samigabacho:


  Dos respuestas atrás, en este tema, te dejé un adjunto con el "script" para cargar que si debe funcionar. Este es un "punto gml" que debes ingresarlo al proyecto con la opción "import script".

   Lo hice precisamente porque los "scripts" de "cargar" y "guardar" enviados antes no estaban pensados para ese formato de datos.

  Te pido por favor que me disculpes la demora y trates de probar el último que te dejé como adjunto dos respuestas atrás.

  Gracias por la atención prestada y disculpa las molestias causadas.  ;D


#21 Octubre 01, 2012, 06:08:08 PM Ultima modificación: Octubre 01, 2012, 06:30:36 PM por Samigabacho
Amigo ferhand, ahí radicaba mi error... abrir el fichero "scr_cargar_old_0.1.gml" con un editor y copie y pegué en un nuevo script. Ahora que lo he hecho importando ha funcionado perfectamente, o al menos eso creo ya que aún no he podido verificar que recibe los valores de la misma manera que son mandados.
De hecho es lo que voy a pasar a verificar intentando sacarlos por pantalla.
Muchas gracias de nuevo y... no hace falta que te disculpes por nada, de hecho me estás ayudando mucho.
:D
EDITADO: Siento rectificarme, pero sigue dando error:


___________________________________________
ERROR in
action number 1
of Create Event
for object obj_inicio:

In script scr_cargar:
Error in code at line 59:

                        ^
at position 23: Cannot compare arguments.

Bueno definitivamente el script de Mgbu me funciona (el que me sugiere en la última respuesta de la primera página). He añadido un antes de que termine el script un mensaje emergente para ver si llega la ejecución hasta el final... y lo hace.
    show_message("Cargado diseño...??");

Pero me interesaría saber si realmente está los datos que he cargado (sobre todo para intentar comprender mejor el código), así que intento pintarlo en un room antes de que el juego comience:
    var columna, fila;
   
    for (columna = 1; columna <real(var_tablas[columna,3])+1;columna +=1){
        for (fila = 1; fila <real(var_tablas[fila,2])+1;fila+=1){
            draw_text(x+(columna-1)*64, y+(fila-1)*16, string (tb_Diseno_1[columna, fila]));
        }
    }

Imagino que no debe de ser la manera ya que me da un error

Cita de: Samigabacho en Octubre 01, 2012, 08:19:11 PM
Bueno definitivamente el script de Mgbu me funciona (el que me sugiere en la última respuesta de la primera página). He añadido un antes de que termine el script un mensaje emergente para ver si llega la ejecución hasta el final... y lo hace.
    show_message("Cargado diseño...??");

Pero me interesaría saber si realmente está los datos que he cargado (sobre todo para intentar comprender mejor el código), así que intento pintarlo en un room antes de que el juego comience:
    var columna, fila;
   
    for (columna = 1; columna <real(var_tablas[columna,3])+1;columna +=1){
        for (fila = 1; fila <real(var_tablas[fila,2])+1;fila+=1){
            draw_text(x+(columna-1)*64, y+(fila-1)*16, string (tb_Diseno_1[columna, fila]));
        }
    }

Imagino que no debe de ser la manera ya que me da un error
El código que me dió Ferhand para leer las BD es este:
for(i=0;i<var_tablas[1,2]+1;i+=1)       // para cada fila
    {
        for(j=0;j<var_tablas[1,3]+1;j+=1)   // para cada columna
        {
            a = variable_local_array2_get("tb_"+string(var_tablas[1,1]),i,j);
            draw_text(50+(j*100),50+(i*25),a);
        }
    }

Fijate que a la cantidad de filas y columnas las saca del array "var_tablas", su funcionamiento lo expliqué antes:
Citarvar_tablas[x,x]: Guarda los datos de las tablas, en [1,1] guarda el nombre de la tabla 1, en [1,2] guarda la cantidad de filas de esa tabla y en [1,3] guarda las columnas de la tabla. Si cargás dos tablas la información de la segunda tabla está en [2,1],[2,2] y [2,3]. La tercer tabla en [3,1],[3,2] y [3,3], etc.
Como ves si sabés la cantidad de filas y de columnas no es tan necesario.
Otra cosa complicada es "a = variable_local_array2_get("tb_"+string(var_tablas[1,1]),i,j);", esa función extraña aparece ahí porque el código está preparado para funcionar con una tabla de cualquier nombre, tranquilamente podés reemplazar esa línea por "a=tb_nombretabla[i,j]"

YA estamos cerca! :D
A eso lo podés pegar como está en el step, aunque al igual que el scr_guardar tiene cositas que no las necesitás, pero igual como están deben funcionar bien (a mi me funciona XD)
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


Al fin lo tengo, creo que entiendo más o menos el código y introduciendo  show_message(); en cada parte del código más o menos se como opera.
El código para pintar el array no me funciona con draw_text(), pero si con show_message().
Sigo teniendo algunas dudas respecto al código, pero creo que el objetivo de la pregunta está más que cumplido, así que se podría dar por SOLUCIONADO y pasos mis demás dudas a preguntas nuevas más concretas.
PD. Muchísimas gracias a Mgbu y Ferhand os acabáis de ganar a un amigo :D

Jeje muchas gracias, me esforcé XD
Está muy bueno como alternativa "show_debug_message()", escribe el mensaje cuando corres en "Debug Mode" (El play rojo). Para ver los mensajes de esa función, en la ventana de debug andá a Tools>Show Messages, te abre una ventana en donde van apareciendo los mensajes, me gusta porque no para el juego, no molesta cuando no se necesita y guarda los mensajes
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


Cita de: Mgbu en Octubre 02, 2012, 10:07:32 PM
Jeje muchas gracias, me esforcé XD
Está muy bueno como alternativa "show_debug_message()", escribe el mensaje cuando corres en "Debug Mode" (El play rojo). Para ver los mensajes de esa función, en la ventana de debug andá a Tools>Show Messages, te abre una ventana en donde van apareciendo los mensajes, me gusta porque no para el juego, no molesta cuando no se necesita y guarda los mensajes
  Saludos amigos:

  ¡ Increíble! Yo no sabía acerca de esa función...  :o 

   Eso me hará la vida más fácil...