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

61
Cita de: Strod en Octubre 16, 2013, 12:08:36 AM
Hola, primero de todo agradecerte las molestias que te has tomado en contestarme y en hacer un nuevo ejemplo.

Los arrays sí que los he visto en varios sitios mientras iba estudiando sobre programación en GM, pero nunca los he aplicado y sinceramente mientras pensaba como hacer mi tablero ni caí en ellos, después de haber visto tu programa con arrays casi mejor así porque de haber empezado con arrays no habría hecho nada, para hacerlo como tú hace falta un nivel que no tengo.

Pero me parece muy interesante (y más profesional) tu enfoque, así que mañana me pondré a estudiarlo para aprender de él.

Saludos y muchas gracias por tu tiempo.
Si, a lo mejor es mas dificil. Pero mientras vas practicando vas a ver que no es tan dificil. Hace un año ni pensé en que algún iba a escribir GML, ahora pienso que nunca mas voy a usar D&D
Cualquier cosa pregunta si no entendes algo, a lo mejor lo confuso son las cuentas que hice en algunos lados

Tambien podés usar las listas que mencionó onixander, no me había acordado de que existian
62
Guerra de IAs (GIA) / Re:GIA_04 Maze Shooter
Octubre 15, 2013, 09:04:39 PM
Como todas las semanas, la envias el miercoles y el jueves te divertis viendo soldaditos con el cerebro de una mosca
63
Yo lo hubiera comenzado a hacer con arrays. Porque en programación lo más cecano a una tabla que hay creo que es un array bidimensional. No se bien si conoces un array, pero es simplemente una lista de variables
Obviamente a lo tuyo dejalo como está, es mejor que lo hagas de una forma que entiendas bien, pero esta me gusta más, porque lo que uno haga es independiente de lo que se ve en pantalla, entonces si uno cambia el estilo del juego no hay que tocar nada, solo hay que cambiar cómo se dibuja

En un array se pueden guardar numeros, strings, o lo que sea en distintos indices o lugares. Para usarlos se escribe el nombre del array y entre corchetes el índice. Por ejemplo:
arrayNombres[0] = "Martin"
arrayNombres[1] = "Pedro"
arrayNombres[2] = "Lucas"


Lo interesante es que se pueden hacer arrays bidimensionales, que son lo mismo que las listas. En vez de tener un indice tiene dos. Entonces por ejemplo:
array[0,0] = "Martin"
array[0,1] = "Pedro"
array[0,2] = "Lucas"
array[1,0] = "36 años"
array[1,1] = "67 años"
array[1,2] = "13 años"

Eso sería una tabla en donde hay nombres, y en la columna de al lado edades. Entonces si uno quiere, el primer indice puede indicar la columna y el segundo la fila como hice mas arriba

Entonces yo habria hecho un array bidimensional que guarde el color de cada celda. Y después para mostrarlo en la pantalla se viene lo dificil. Porque uno tiene que dibujar sprites dependiendo de lo que dice la tabla
Te adjunté un ejemplo. Ahí yo en vez de hacerlos titilar les dibujo un recuadro verde, pero ponele el efect que quieras

Como vas a ver no fue mas facil. Pero me parece que de esta forma queda todo mas ordenado, es depende de como te guste y de qué vas a hacer con la tabla
64
Ya encontré la forma, el problema estaba en que uno nunca "frenaba" a las celdas que habían comenzado a titilar y que debían parar de titilar
Eso se puede arreglar modificando de esta forma al código step de obj_senal:
[gml]if (selection == noone)
    {
        visible = false;
    }
    else
    {   // la vble. 'selection' cambia desde el evento mouse 'left Pressed' del obj_baldosa.
        // coge la id del objeto sobre el que posicionamos el mouse.
        x = selection.x;
        y = selection.y;
        visible = true;
        // lo siguiente sirve para dectectar casillas contiguas a la seleccionada, le ponemos que corran las
        // imagenes (image_speed = 1) para que se note que son seleccionables.
        {
           if (iden1 != noone)
           { iden1.image_speed = 0; }
           if (iden2 != noone)
           { iden2.image_speed = 0; }
           if (iden3 != noone)
           { iden3.image_speed = 0; }
           if (iden4 != noone)
           { iden4.image_speed = 0; }
        }
        iden1 = instance_position(x+50,y,obj_baldosa);
        iden2 = instance_position(x-50,y,obj_baldosa);
        iden3 = instance_position(x,y+50,obj_baldosa);
        iden4 = instance_position(x,y-50,obj_baldosa);
        {
           if (iden1 != noone)
           { iden1.image_speed = 1; }
           if (iden2 != noone)
           { iden2.image_speed = 1; }
           if (iden3 != noone)
           { iden3.image_speed = 1; }
           if (iden4 != noone)
           { iden4.image_speed = 1; }
        }
    }[/gml]
Como ves, lo que hago es frenar a las celdas iden (iden1, iden2, etc), luego actualizo las celdas iden, y por último hago titilar a las nuevas celdas iden
Para que funcione vas a tener que declarar las variables iden en el create del objeto obj_senal de esta forma:
[gml]// esta vble. nos dice si una casilla está seleccionada
selection = noone;
iden1 = noone;
iden2 = noone;
iden3 = noone;
iden4 = noone;
[/gml]

Así lo que vos pedís se arregla, pero si te fijas las celdas a veces quedan con la imagen "que titila", o sea que a veces las celdas se van a quedar iluminadas, y no van a volver a la imagen original. La solución es que además de frenar a las celdas iden le cambiemos la imagen por la original con iden.image_index = 0
Ahora el evento step queda así:
[gml]if (selection == noone)
    {
        visible = false;
    }
    else
    {   // la vble. 'selection' cambia desde el evento mouse 'left Pressed' del obj_baldosa.
        // coge la id del objeto sobre el que posicionamos el mouse.
        x = selection.x;
        y = selection.y;
        visible = true;
        // lo siguiente sirve para dectectar casillas contiguas a la seleccionada, le ponemos que corran las
        // imagenes (image_speed = 1) para que se note que son seleccionables.
        {
           if (iden1 != noone)
           { iden1.image_speed = 0; iden1.image_index = 0 }
           if (iden2 != noone)
           { iden2.image_speed = 0; iden2.image_index = 0 }
           if (iden3 != noone)
           { iden3.image_speed = 0; iden3.image_index = 0 }
           if (iden4 != noone)
           { iden4.image_speed = 0; iden4.image_index = 0 }
        }
        iden1 = instance_position(x+50,y,obj_baldosa);
        iden2 = instance_position(x-50,y,obj_baldosa);
        iden3 = instance_position(x,y+50,obj_baldosa);
        iden4 = instance_position(x,y-50,obj_baldosa);
        {
           if (iden1 != noone)
           { iden1.image_speed = 1; }
           if (iden2 != noone)
           { iden2.image_speed = 1; }
           if (iden3 != noone)
           { iden3.image_speed = 1; }
           if (iden4 != noone)
           { iden4.image_speed = 1; }
        }
    }[/gml]
El problema es que este código se ejecuta constantemente porque está en el evento step haciendo que las celdas nunca titilen, y solo es necesario ejecutarlo al seleccionar una nueva celda iden.

Esto puede hacer con un User Event
O sea, creamos un evento, que sólo será ejecutado cuando nosotros queramos, en nuestro caso, cuando hacemos click
Entonces hacemos click derecho al evento step, ponemos Change Event y elegimos Other>User Defined>User 0
Y después tenemos que ejecutar ese evento cuando queremos, entonces en el Left Pressed del obj_baldosa agregué with obj_senal event_perform(ev_other, ev_user0), quedando así:
[gml]  // aqui vemos si aparece la 'equis' cuando seleccionamos una casilla con el ratón.
  if (obj_senal.selection = noone)
    { obj_senal.selection = id }
    else
    // este 'if' comprueba si hay una casilla ya seleccionada y si es distinta a la nueva que seleccionamos
    // hacemos esto para que no haya que 'deseleccionar una casilla' si queremos pasar a otra.
    if ( (obj_senal.selection != noone) and (instance_position(x,y,obj_baldosa) != obj_senal.selection) )
       { obj_senal.selection = id }
       else
       { obj_senal.selection = noone }
with obj_senal event_perform(ev_other, ev_user0)[/gml]

Esta fue la respuesta larga, para que entiendas qué hice, la respuesta corta es que descargues tu ejemplo modificado que adjunté
Creo que había fromas mejores de hacer lo que pedís pero lo hice así para modificar lo menso que pueda tu código
65
Hacer lo que me dijiste no me servia, si hacia if (xprevious = x || yprevious = y) para comparar siempre me devolvia 1
Entonces hice lo de las variables auxiliares pero apenas "destrababa" la IA se volvia a trabar

Podes creer que el error estaba en que tenía mal los argumentos de scr_calcular_camino()? :o :o
Te juro que de tanto renegar ya me estaba dando ganas de llorar jaja. No entiendo como se me puede haber pasado, cuando cambió el SDK yo había cambiado todos los argumentos

Algo útil para encontrar dónde cometiste ese error:
En la barra de herrmientas ir a Scripts>Search in scripts... y buscar scr_calcular_camino(x
66
Guerra de IAs (GIA) / Re:GIA_04 Maze Shooter
Octubre 14, 2013, 01:19:18 AM
Perdon por doble post, pero tengo un problema con scr_get_camino que hace que mi IA no se mueva, está explicado en http://www.comunidadgm.org/index.php?topic=19166.msg90939#new
67
Tengo un problema con mi IA, relacionado con eso de que se queda trabado dando vueltas sin moverse

El problema es que mientras se queda trabado dando vueltas scr_get_camino() sigue devolviendo 1
No entiendo, la única forma de que ocurra es que uno se esté moviendo hacia el lugar donde esta parado. Pero como no encuentro donde me estoy moviendo hacia donde estoy parado queria saber si hay alguna forma de saber cuando estoy parado realmente

Lo raro es que salvo que haya un error muy pavo, nunca me muevo a mi posición y nunca me muevo a una posición si scr_calcular_camino devuelve 0. Hay alguna forma de que al calcular un camino el script scr_get_camino() sea 1?
68
Guerra de IAs (GIA) / Re:GIA_04 Maze Shooter
Octubre 12, 2013, 02:36:55 AM
Cita de: Ulises en Octubre 12, 2013, 01:39:59 AM
Ferhand, a mi me pasa igual desde el principio, y también tengo un Windows 8 x64, no puedo probar bien mis IA's cada vez que se disparan y en el ejecutable. Será de este maldito Windows 8?
No, me pasa en Windows 7 también
Lo raro es que cuando hice mi juego de tanques andaba, y tenía Windows 7 (o Vista, no me acuerdo)
Para colmo que busqué un poco en Google y nada.
Habría que buscar bien el problema, ver si es la cración de objetos, las colisiones, o qué
En Linux para encontrar los errores de los programas se abren desde el terminal así el programa va dejando un log o algo así. No se puede en Windows?
69
Guerra de IAs (GIA) / Re:GIA_04 Maze Shooter
Octubre 12, 2013, 12:05:27 AM
Cita de: ferhand en Octubre 11, 2013, 11:12:18 PM
  Saludos makeros:


  ¿Señores, seré el único que se le cierra el ejecutable cuando dos IAs comienzan a dispararse entre sí?  ???

  Aún no he podido ver los resultados de las tercera ronda...  :'(

A mi tambien me pasa, que Windows tenes? Yo tengo Windows 8 64 bits, pero tambien me pasa cuando juego a mis juegos en la notebook (Windows 7 32 bits)
O sea, se me cierra cuando dos se empiezan a disparar, porque en mi juego de tanques tambien me pasa (podes ver que el juego es bien simple)
70
Guerra de IAs (GIA) / Re:GIA_04 Maze Shooter
Octubre 09, 2013, 11:37:46 PM
Te envie mi nueva IA porque ya es miercoles de nuevo!
Fijate si esta todo bien
71
Juegos en desarrollo / Re:Consola GM
Octubre 05, 2013, 07:36:59 PM
Jajaja, me parece buena idea la de la radio
72
Guerra de IAs (GIA) / Re:GIA_04 Maze Shooter
Octubre 04, 2013, 01:35:10 AM
Que lastima, voy a tener que cambiar el chequeo de enemigos. Ahora el ataque suicida se hace al ver a Texic
Mejoramos un poco, pero todavia no se por que el mio se quedaba trabado despues de disparar a alguien
73
Noticias / Re:Radio Makero abierta al público
Octubre 02, 2013, 10:11:32 PM
Cita de: Texic en Octubre 02, 2013, 08:04:32 PM
Cita de: Mgbu en Octubre 02, 2013, 07:35:04 PM
Podrian pasar articulos publicados, yo tengo algunos, pero creo que el mas interesante es el de transiciones personalizadas

Hay muchos articulos en la CGM, ahi tienen contenido de sobra
A qué te referís con tienen? Si te referís al staff no es nuestra tarea realmente, y no nos da el tiempo para controlar el foro y hacer eso al mismo tiempo, por eso se abrió la radio al público. Si querés pasar artículos a formato de audio tenés luz verde para hacerlo  :)
Ahh, ahora entiendo, crei que lo grababan ustedes. Yo escribir no tengo problema, pero grabar imposible, no se me entiende nada y no tengo buen microfono
74
Noticias / Re:Radio Makero abierta al público
Octubre 02, 2013, 07:35:04 PM
Podrian pasar articulos publicados, yo tengo algunos, pero creo que el mas interesante es el de transiciones personalizadas

Hay muchos articulos en la CGM, ahi tienen contenido de sobra
75
Guerra de IAs (GIA) / Re:GIA_04 Maze Shooter
Septiembre 29, 2013, 04:19:30 PM
A mi tambien me suele pasar, pero como no debugeo tanto las batallas (¿Que voy a debugear si mi IA no hace nada? XD) no me molesta tanto. Simplemente se encuentran dos IAs, se disparan,  y dice que ha dejado de funcionar