Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Mostrar Mensajes

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


Temas - Alesxanderk

Páginas: 1
1
Juegos en desarrollo / HixelArt
« en: Febrero 03, 2018, 01:30:12 am »


HixelArt


Otro


GM: Studio

Un programa de HixelArt, un hixel es la forma más pequeña de un hexágono posible. La base es utilizar esta forma en una rejilla para obtener una estética nueva en el pixel art.





https://www.dropbox.com/s/a8124zq6i18lzu3/Hixels.zip?dl=1


Botones de acceso directo:

D - Dibujar
E - Borrar
M - Mover lienzo
P - Obtener color
G - Guardar .png
H - Guardar .hix


2
Preguntas y respuestas / Forma más eficiente de dibujar
« en: Enero 30, 2018, 06:17:05 pm »
Hola comunidad, hace tiempo que no pasaba por aquí, he regresado un poco con la programación, y tengo una gran duda con gane maker.

Tengo un proyecto para pixelart, pero estoy buscando una forma de dibujar eficientemente lo que el usuario hace.

Me explico:

Al principio dibujaba sprites en el evet draw con un ciclo for (según yo no es muy eficiente).
Luego lo hice con draw_rectangle (pero al ser muchos draw, me parece que tampoco es eficiente).

Ahora uso tiles, pero al hacer un lienzo/dibujo de unos 300x300 mi PC (un tanto buena) no da para poder trabajar con tantos tiles en pantalla.
Cual es la mejor forma de dibujar en GMS 1 y que trucos podría usar para mejorar el rendimiento?

3
Espero que los ya un poco experimentados en GM:S me ayuden a optimizar o rehacer de mejor forma un script de niebla de guerra y que al mismo tiempo uso para la IA de mi juego RogueLike Project.

El problema es que el script es muy pesado para ejecutarlo en varias instancias, aunque no lo hago en todas al mismo tiempo ni en los eventos steps.

Les explico como lo uso:
- Es un sistema de micro turnos en los cuales, el objeto controlador va activando una alarma de las distintas instancias enemigas, una a una. En esa alarma se ejecuta el script en cuestión para buscar al heroe y así determinar si estoy en su rango visible o no, para perseguirme o en caso de estar a su lado atacarme.

Dejo acá el codigo para quien quiera verlo, en los adjuntos dejo un ejecutable para que vean como funciona, con el boton derecho del ratón creas "Paredes", con el izquierdo creas "Suelos" y con WASD el personaje se mueve. Tengo intensión de publicar el script en su apartado correspondiente una vez logre optimizarlo.

NOTA: Procuren no acercarse demasiado al borde o les saltara error por que uso un array para saber que hay en cada tile de 32x32 del mapa.

Spoiler
Código: [Seleccionar]
Rep=0;ObZ1=false;ObZ2=false;ObZ3=false;ObZ4=false;Vuelta=0;
zx = x/32;
zy = y/32;
repeat(8){
    switch(Vuelta){
        case 0: Rep=5;Ext=4; break;case 1: Rep=5;Ext=3; break;
        case 2: Rep=4;Ext=3; break;case 3: Rep=4;Ext=2; break;
        case 4: Rep=3;Ext=1; break;
        case 5: Rep=2;Ext=0; break;case 6: Rep=2;Ext=0; break;
        case 7: Rep=1;Ext=0; break;
    }
    if Mundo[zx,zy+Vuelta]==1{
        if ObZ1==false{
            draw_sprite(spr_blanco,0,zx*32,(zy+Vuelta)*32);
            Ob1=false;j=0;k=0;Int=1;
            repeat(Rep){
                if Mundo[zx+j,zy+(Vuelta+k)]==1{
                    if Ob1==false{
                        draw_sprite(spr_blanco,0,(zx+j)*32,(zy+Vuelta+k)*32);
                        if Int<=Ext{
                            if Mundo[zx+j,zy+(Vuelta+k)+1]==1{
                                draw_sprite(spr_blanco,0,(zx+j)*32,(zy+Vuelta+k+1)*32);
                            }
                        }
                    }
                }
                else if Ob1==false{Ob1=true;}
                j++;k++;Int++;
            }
            Ob1=false;j=0;k=0;Int=0;
            repeat(Rep){
                if Mundo[zx+j,zy+(Vuelta+k)]==1{
                    if Ob1==false{
                        draw_sprite(spr_blanco,0,(zx+j)*32,(zy+Vuelta+k)*32);
                        if Int<=Ext{
                            if Mundo[zx+j,zy+(Vuelta+k)+1]==1{
                                draw_sprite(spr_blanco,0,(zx+j)*32,(zy+Vuelta+k+1)*32);
                            }
                        }
                    }
                }
                else if Ob1==false{Ob1=true;}
                j--;k++;Int++
            }
        }
    }
    else if ObZ1==false{ObZ1=true;}
    if Mundo[zx,zy-Vuelta]==1{
        if ObZ2==false{
            draw_sprite(spr_blanco,0,zx*32,(zy-Vuelta)*32);
            Ob1=false;j=0;k=0;Int=0;
            repeat(Rep){
                if Mundo[zx+j,zy-(Vuelta+k)]==1{
                    if Ob1==false{
                        draw_sprite(spr_blanco,0,(zx+j)*32,(zy-(Vuelta+k))*32);
                        if Int<=Ext{
                            if Mundo[zx+j,zy-(Vuelta+k)-1]==1{
                                draw_sprite(spr_blanco,0,(zx+j)*32,(zy-(Vuelta+k)-1)*32);
                            }
                        }
                    }
                }
                else if Ob1==false{Ob1=true;}
                j++;k++;Int++;
            }
            Ob1=false;j=0;k=0;Int=0;
            repeat(Rep){
                if Mundo[zx+j,zy-(Vuelta+k)]==1{
                    if Ob1==false{
                        draw_sprite(spr_blanco,0,(zx+j)*32,(zy-(Vuelta+k))*32);
                        if Int<=Ext{
                            if Mundo[zx+j,zy-(Vuelta+k)-1]==1{
                                draw_sprite(spr_blanco,0,(zx+j)*32,(zy-(Vuelta+k)-1)*32);
                            }
                        }
                    }
                }
                else if Ob1==false{Ob1=true;}
                j--;k++;Int++;
            }
        }
    }
    else if ObZ2==false{ObZ2=true;}
    if Mundo[zx+Vuelta,zy]==1{
        if ObZ3==false{
            draw_sprite(spr_blanco,0,(zx+Vuelta)*32,zy*32);
            Ob1=false;k=0;i=0;Int=0;
            repeat(Rep){
                if Mundo[zx+(Vuelta+k),zy+i]==1{
                    if Ob1==false{
                        draw_sprite(spr_blanco,0,(zx+Vuelta+k)*32,(zy+i)*32);
                        if Int<=Ext{
                            if Mundo[zx+(Vuelta+k)+1,zy+i]==1{
                                draw_sprite(spr_blanco,0,(zx+Vuelta+k+1)*32,(zy+i)*32);
                            }
                        }
                    }
                }
                else if Ob1==false{Ob1=true;}
                k++;i++;Int++
            }
            Ob1=false;k=0;i=0;Int=0;
            repeat(Rep){
                if Mundo[zx+(Vuelta+k),zy+i]==1{
                    if Ob1==false{
                        draw_sprite(spr_blanco,0,(zx+Vuelta+k)*32,(zy+i)*32);
                        if Int<=Ext{
                            if Mundo[zx+(Vuelta+k)+1,zy+i]==1{
                                draw_sprite(spr_blanco,0,(zx+Vuelta+k+1)*32,(zy+i)*32);
                            }
                        }
                    }
                }
                else if Ob1==false{Ob1=true;}
                k++;i--;Int++;
            }
        }
    }
    else if ObZ3==false{ObZ3=true;}
    if Mundo[zx-Vuelta,zy]==1{
        if ObZ4==false{
            draw_sprite(spr_blanco,0,(zx-Vuelta)*32,zy*32);
            Ob1=false;i=0;k=0;Int=0;
            repeat(Rep){
                if Mundo[zx-(Vuelta+k),zy+i]==1{
                    if Ob1==false{
                        draw_sprite(spr_blanco,0,(zx-(Vuelta+k))*32,(zy+i)*32);
                        if Int<=Ext{
                            if Mundo[zx-(Vuelta+k)-1,zy+i]==1{
                                draw_sprite(spr_blanco,0,(zx-(Vuelta+k)-1)*32,(zy+i)*32);
                            }
                        }
                    }
                }
                else if Ob1==false{Ob1=true;}
                k++;i++;Int++;
            }
            Ob1=false;k=0;i=0;Int=0;
            repeat(Rep){
                if Mundo[zx-(Vuelta+k),zy+i]==1{
                    if Ob1==false{
                        draw_sprite(spr_blanco,0,(zx-(Vuelta+k))*32,(zy+i)*32);
                        if Int<=Ext{
                            if Mundo[zx-(Vuelta+k)-1,zy+i]==1{
                                draw_sprite(spr_blanco,0,(zx-(Vuelta+k)-1)*32,(zy+i)*32);
                            }
                        }
                    }
                }
                else if Ob1==false{Ob1=true;}
                k++;i--;Int++;
            }
        }
    }
    else if ObZ4==false{ObZ4=true;}
    Vuelta++;
}

4
Intercambio / [Cerrado] - Ofrezco mi ayuda a cualquier proyecto
« en: Mayo 01, 2016, 07:15:06 pm »
Hace no mucho inice en GM:S y actualmente me encuentro con mucho tiempo libre, estoy ancioso de aprender más sobre GML y practicar tambien, por ese motivo ofrezco mi ayuda gratuita como programador principiante a quien quiera, pueden mandarme un MP o contestar acá en este tema

5
Juegos en desarrollo / RogueLike Project
« en: Abril 26, 2016, 05:45:38 am »

RogueLike Project

Roguelike

GM: Studio

Eres un aventurero que se ha adentrado en una mazmorra sin fin, llena de slimes que facilmente te pueden matar, deberas de buscar equipamento, huir de ellos o pelear, sobre todo debes de sobrevevivir lo más posible.


http://subefotos.com/ver/?92e8b97aeb332aab622b9d1288d5e4f5o.png

Archivo Adjunto


Que he logrado actualmente:
-Generación de la mazmorra (Falta ambientación)
-Enemigos (IA basica)
-Objetos (Falta la comida :-[ )
-Inventario estilo drag and drop 8)
-Sistema de combate (optimizado para mayor fluidez)
-Menú (Aún no se puede continuar una partida ??? )

-La partida se guarda en \"Roaming/Roguelike Project/CN.ini\" por si les da algún problema.
-No se muy bien que tematatica deberia de darle a mi juego, ¿tienen alguna sugerencia? (prehistorico, cyber-punk, etc.)

Espero ansioso sus comentarios, criticas y sugerencias  :D !!!


6
Preguntas y respuestas / Encuesta - Sistema de movimiento
« en: Abril 15, 2016, 09:46:23 pm »
Holaa comunidad GM

Esta vez más que una pregunta, deseo hacer una encuestra entre dos formas de movimiento.
El juego se trata de nuestro heroe que camina y salta entre baldosas, las cuales pueden tener bombas que su contador se reduce a cada salto y debemos esquivar.

Tengo planteada la forma de movimientos más normal (WASD y Espacio) y otra con un sistema de "instrucciones" que debemos de darle a nuestro heroe.

¿Cúal de los dos les parece mejor? o ¿Se les occure alguno mejor?

Les dejo una imagen abajo para que vean como es el creador de niveles de mi juego.

7
Preguntas y respuestas / Encuesta - Sistema de movimiento
« en: Abril 15, 2016, 09:40:32 pm »
Holaa comunidad GM

Esta vez más que una pregunta, deseo preguntar que tipo de movimiento les más llamativo para un juego de puzzles.
El juego se trata de nuestro heroe que camina y salta entre baldosas, las cuales pueden tener bombas que su contador se reduce a cada salto y debemos esquivar.

Tengo planteada la forma de movimientos más normal (WASD) y otra con un sistema de "instrucciones" que debemos de darle a nuestro heroe.
¿Cúal les parece mejor?

Les dejo una imagen abajo para que vean como es el creador de niveles de mi juego.

8
Holaaa de nuevo comunidad  :-[ XD

Estoy tratando de mejorar el generador de mazmorra de mi un juego Roguelike, la generación de los pisos/niveles era demasiado aleatoria y desordenada.  :-\ He estado probando con una generación diferente para la mazmorra y he avanzado mucho, solo me falta una pequeña parte que no logro ni plantearme como hacerla  :'(

Tengo unos objetos dentro de los cuartos los cuales buscan otro objeto, de su mismo tipo, más cercano y que no se hayan conectado con él anteriormente. Se elige de forma aleatoria si el camino va a salir por el lado de arriba, abajo, izquierda o derecha y tambien por que lado va a entrar al otro cuarto, hasta aquí todo bien.

El problema es que los caminos pasan por encima de otros cuartos o por encima del cuarto al que deben de llegar, quisiera que estos caminos intentasen "esquivar/rodear" los cuartos, pero no se como hacerlo. La forma en que se unen ahora, es agregando tiles con un for() hasta que las coordenadas x,y sean iguales. Se que hacerlo de esa forma es el origen del problema  XD  pero no se como hacerlo...

Adjunto una imagen para que puedan ver de que hablo.

9
Preguntas y respuestas / Problema con "Included Files"
« en: Marzo 30, 2016, 12:41:46 am »
Tengo un pequeño problema con unos archivos *.ini
Tengo un archivo DB.ini en cual cree anteriormente y lo puse en los archivos incluidos, este .ini solo lo "leo".
Pero tengo otro archivo CN.ini en el cual quiero guardar datos para continuar una partida, pero en lugar de modificar el .ini que esta en los archivos incluidos, crea un .ini en %appdata%

Alguien sabe como hacer para que no cree el .ini en %appdata% y modifique el archivo que tengo en los "Included Files"?  :'(

10
Preguntas y respuestas / Ayuda con Base de Datos[SOLUCIONADO]
« en: Marzo 02, 2016, 03:44:15 pm »
Me encuentro haciendo un juego de tipo RPG, tengo un sistema de inventario y la "tabla de objetos" hecho con archivos *.ini pero se me hace algo engorroso y quiza ineficiente. Ahora estoy pensando en hacer una tabla de mounstros donde almacene el sprite, el sub_sprite y todos sus estadisticas, pero antes de avanzar quisiera saber si hay una forma de trabajar con una base de datos o una tabla local, hasta ahora solo he visto como trabajar con base de datos o tablas en linea.

Alguien podria ayudarme con una idea, una extension o algo parecido?

11
Preguntas y respuestas / Ayuda con Pathfinding Enemigo[SOLUCIONADO]
« en: Enero 14, 2016, 07:31:31 pm »
Estoy elaborando la IA de mis enemigos, el movimientos es por turnos y saltando cuadros de 32x32 dentro de un rango establecido.

La forma en que el enemigo me busca, es que busca el piso más cercano a mi y lo selecciona para ir hasta él, saltando de piso en piso. Todo funciona bien hasta el punto en que yo me encuentro tras un obstáculo, busco una solución para que intente rodear el obstáculo y llegar hasta a mi.

Adjunto 2 imágenes para que tengan una mejor idea, los cuadrados que se ven más rojos son los que el enemigo no puede seleccionar y los verdes son los que puede seleccionar, el cuadrado azul es el seleccionado.

Espero que alguien pueda ayudarme con el concepto de lo que trato de conseguir  :D

Páginas: 1