Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

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.


Mensajes - BssString

Páginas: 1 2 3 ... 18
1
Preguntas y respuestas / Re:Orden triángulos en modelo 3D
« en: Octubre 08, 2020, 08:25:34 pm »
Hola DarkKRuleR

Insisto en que puede ser problema del culling, a mi no me pasa... desactivalo y manda un screenshot de cómo te anda el dibujo.
Desactivar el back face culling hace que la figura dibuje las 2 caras, sin importar el orden de los vértices, así si miras la figura desde distintos ángulos, siempre se dibujará completa.

GMS 2
gpu_set_cullmode(cull_noculling)

GMS 1.4
d3d_set_culling(false)

Saludos

2
Preguntas y respuestas / Re:Orden triángulos en modelo 3D
« en: Octubre 08, 2020, 06:26:20 pm »
Ahhhhh
Esa opción creo que es el Face Culling. Activar el Back-Face Culling hace que NO se dibuje la parte trasera del triángulo, quizás la has activado en algún momento y la tengas que desactivar.

GMS2
gpu_set_cullmode(cullmode)

GMS1.4
d3d_set_culling(enable)

Saludos

3
Hola Diego

No sé si se puede de forma masiva, pero al menos en GMS 1.4 cuando das clic secundario a la sección de "room" por ejemplo, sale la opción "add existing room" que te deja importar una room desde un archivo en tu computador, lo mismo con Scripts y Objetos.

Saludos

4
Hola DarkKRuleR

Cada dibujo que haces, pasa por una Shader por defecto de Game Maker que hace ciertas correcciones "por si acaso" a lo que dibujas.
Puedes intentar evitar esa Shader para ver si eso tiene alguna mejora en el código o no.

Simplemente crea una nueva Shader, llámala como quieras y no le hagas ningún cambio, déjala tal como la genera Game Maker.
En el Draw_Event usas:
shader_set(tu_shader_aqui)
//tus draw events aqui
shader_reset()

Eso hará que Game Maker en vez de usar la Default Shader, usará tu Shader que has generado que no tiene código.

Esa información se encuentra en este artículo:
https://help.yoyogames.com/hc/en-us/articles/216754868-Optimising-The-Draw-Pipeline

Otra cosa que puedes hacer es obviamente NO dibujar a los personajes que se encuentren fuera de cámara.

Saludos

5
Hola Alemar5

A mi entender no, Game Maker se volvió multiplataformas y ya no tiene muchas funciones asociadas a Windows.
Quizás alguna dll de terceros lo pueda hacer, pero directamente las funciones de Game Maker no pueden.

Saludos

6
Preguntas y respuestas / Re:Orden triángulos en modelo 3D
« en: Octubre 08, 2020, 03:12:05 am »
Hola DarkKRuleR

Mejor crear el objeto (como triángulo) en un programa externo (como Blender que es gratuito) e importar el .OBJ o no?
y la textura en .PNG

Saludos

7
Preguntas y respuestas / Re:Generación Procedural
« en: Octubre 08, 2020, 03:09:40 am »
Hola Luis

Una idea rápida es que puedes combinar dos ciclo FOR para recorrer cada casilla de la room y crear un objeto al azar ahí.
No entiendo qué variables has usado, ni qué hace cada objeto, así que lo explicaré de forma genérica y tu lo adaptas a tus necesidades.
En el create event:

var i, j;
for (i=0; i<480; i+=16) {
for (j=0; j<640; j+=16) {
instance_create( j , i , choose(obj_bloque1,obj_bloque2,obj_bloque3) )
}
}

Eso recorre cada casilla de la room y crea un objeto al azar entre los 3 bloques que puse de argumentos para la función "choose".
El problema de esto es que los objetos son creados al azar usando una distribución uniforme, eso significa que cada objeto tiene la misma probabilidad de ocurrencia (a menos que lo pongas dos veces dentro del choose, en ese caso el objeto tendría el doble de probabilidades de ser creado que los demás).

Un sistema mejor (pero más complejo) puede ser quizás crear un PERLIN NOISE que guarde un número de 0 a 1 en una DS_GRID y luego crear un objeto según el valor que está en la grid.
ej: si el número va de 0 a 0.2 que me cree oceano, hasta 0.7 que me cree el continente y si el número da mayor a 0.7 que me cree unas montañas, etc.

Saludos

8
Preguntas y respuestas / Re:Trazar un dibujado con el mouse
« en: Octubre 08, 2020, 02:58:24 am »
Hola T789

No pude imaginarme bien lo que intentas lograr, pero aquí va una sugerencia:
Puedes usar una DS_List para guardar las coordenadas del mouse en cada step (desde el primero al último)
Para el dibujo lo puedes hacer con un ciclo "for", que recorra la lista y dibuje los puntos en pantalla como líneas con el draw_line (para que haga la figura completa que dibujaste)
Y para la colisión, en el Step puedes hacer quizás un collision_line entre cada punto para ver si alguna parte del trazo hizo colisión con la onda o no. No sé que tan ineficiente sea ese sistema, supongo que con un montón de puntos se comenzaría a lagear.

Si sueltas el mouse, puedes limpiar la lista para eliminar los puntos y el trazo.

Al destruir el objeto o terminarse el juego, debes asegurarte de destruir la DS_List para liberar los archivos almacenados en el CACHE.

Saludos

9
Preguntas y respuestas / Re:Sistema de PowerUps
« en: Mayo 04, 2020, 06:25:11 am »
Hola T789!

Yo usé un sistema similar en uno de mis juegos donde mis personajes tenían habilidades pasivas, y la gracia es que a veces diferentes personajes podían tener la misma pasiva, entonces aprovechaba la misma programación.

Lo que hice fue llamar al script de la habilidad en ciertos momentos del código y modificar variables para causar diferentes efectos.

Ej, una pasiva que duplica el daño llamada "double_power" y que tiene valor true o false si la tengo o no.

En el Step
//Primero seteo el valor de las variables por defecto en el mismo Step Event

damage_modifier = 1
if (double_power = true) { scr_double_power() }
damage = 100*damage_modifier

En la programación del scr_double_power
damage_modifier = 2 //Esto duplicará el daño de todos los personajes que tenan activa esa pasiva

Lo que hace es que si NO tienes la pasiva, pegas 100 * 1.
En cambio si tienes la pasiva, corre el script y cambia el valor del modificador de daño a 2, entonces ahora pegas 100 * 2. Es un hechizo simple pero inquebrantable.

Supongo que a tu juego le podría servir un sistema similar, sólo debes elegir dónde llamar la habilidad, y qué variables usar/modificar.

Saludos

10
Hola FernandoNavarro

No sé si eso sea posible la verdad. Creo que steam ofrece un Cloud Service, pero no estoy seguro cómo funciona, nunca lo he usado.

Saludos

11
Preguntas y respuestas / Re:Función lerp ,movimiento pad(solucionado)
« en: Abril 21, 2020, 05:43:57 am »
Hola Ikaro3d

Que bueno que haya funcionado. Si has programado algo con gamepad, me gustaría testear tu proyecto cuando generes algún ejecutable.

Saludos

12
Preguntas y respuestas / Re:multijugador CO-OP
« en: Abril 21, 2020, 05:41:58 am »
Hola cristopher2545

Eso no es posible, para conectarte a un servidor que está corriendo en otra máquina es mandatorio tener la dirección IP del host.
No puedes simplemente poner una contraseña y ya, sin la IP no hay conexión.
Una vez que ya hayas establecido la conexión con la IP del host puedes añadir una contraseña para filtrar si acepta o no acepta tus paquetes de datos.

Saludos

13
Preguntas y respuestas / Re:Función lerp ,movimiento pad
« en: Abril 16, 2020, 03:48:47 am »
Hola Ikaro3d

Encuentro interesante tu idea de usar LERP para suavizar el movimiento, pero le veo un problema al código de teclado.
Específicamente a la condición: "if keyboard_key" del inicio... no le encuentro sentido, pienso que el código quedaría mejor si la borras.
Esa condición te hace frenar de golpe si sueltas todas las teclas y no dejas que el lerp complete la distancia.
Ejemplo: si vas todo a la derecha, te deberías mover a la derecha con el suavizado y todo perfect, pero si sueltas todas las teclas de golpe, el personaje frena de golpe, pero aún le falta recorrer un 85% de la distancia que el LERP del step anterior no lo hizo recorrer. Eso significa que si ahora pulso izquierda, el personaje primero avanzará ese 85% hacia la derecha y luego irá a la izquierda como era esperado.

Este código debería funcionar con el JoyPad. Va explicado con comentarios para que no te pierdas.

//Primero recibo en qué porcentaje muevo el Stick (regresa un valor entre -1 y 1).
//En algunos Joystick de mala calidad, el axis queda pulsado ligeramente, para evitar eso, cuando se mueve 0.1 o -0.1, lo interpreta como 0.
var hdir = gamepad_axis_value(0,gp_axislh); if abs(hdir) < 0.1 { hdir = 0 }
var vdir = gamepad_axis_value(0,gp_axislv); if abs(vdir) < 0.1 { vdir = 0 }

//En caso de haber movimiento en cualquiera de los dos ejes:
if hdir != 0 || vdir != 0 {
//Convierte la coordenada cuadrada del X/Y a una coordenada circular (para que no importa a cuál de los 360º se mueva el personaje, nunca supere la máxima velocidad "v", si no haces esto, en diagonal se movería más rápido)
hdir *= sqrt(1 - 0.5*vdir^2)
vdir *= sqrt(1 - 0.5*hdir^2)
//Esto simplemente ajusta el "x" target e "y" target tal como lo tienes en tu código para keyboard.
xx += v*hdir
yy += v*vdir
}
//Esto actualiza las coordenadas del personaje para moverse un 15% de la distancia que hay entre su coordenada actual y su coordenada objetivo.
x=lerp(x,xx,0.15)
y=lerp(y,yy,0.15)

Edit: Ojo que si pulsas derecha y al mismo tiempo mueves el Stick a la derecha, te moverás dos veces a la derecha (al doble de rápido). Deberías crear algún "if" que te haga moverte o con teclado o con joypad, pero no ambos a la vez

Saludos

14
Hola FernandoNavarro

Para eso se usa la función "http_get_file", sólo necesita 2 parámetros, el link de donde descargará el archivo y el nombre del archivo que guardará.

Y lo de la descarga directa se refiere a que cuando subes un archivo a tu Google Drive, le puedes dar clic secundario y elegir "get shareable link", no sé exactamente cómo se llama esa opción en español, pero creo que es algo así como "obtener link para compartir".
Y eso te genera una ruta, yo aquí he subido un archivo de prueba y esta es la ruta que me genera:
https://drive.google.com/open?id=1yC-ily-29t6jp7OrTSRcvfCUME4GWBCK
Pero ese NO es el link directo. Porque para descargar debes entrar al link y luego pulsar en el botón "descargar".

Ahora... si haces clic en el logo de descarga en la esquina superior derecha (el logo es una flecha apuntando hacia abajo) entonces eso ya te lleva al enlace de descarga directa que a penas entras te baja el archivo. Este es el link de descarga DIRECTA que me ha generado a mí:
https://drive.google.com/u/0/uc?id=1yC-ily-29t6jp7OrTSRcvfCUME4GWBCK&export=download

Ese link es el que debes meter en Game Maker. El proceso es muy sencillo.

Básicamente esta es la línea de código que te descarga el archivo:
Create Event
file = http_get_file("https://drive.google.com/u/0/uc?id=1yC-ily-29t6jp7OrTSRcvfCUME4GWBCK&export=download","DLC/test.txt")
Le he dicho que me descargue el archivo del link y lo guarde en la Carpeta: "DLC" con el nombre "test.txt".
Y listo, eso es todo xD corres esa línea de código y ya tienes el archivo en la carpeta de tu juego que por defecto es %localappdata%/<nombre de tu proyecto>.

Ahora si quieres ejecutar alguna línea de código una vez que el archivo se haya descargado, puedes usar el siguiente evento:

Asynchronous HTTP Event
if ds_map_find_value(async_load, "id") == file {
var status = ds_map_find_value(async_load, "status");
if status == 0 {
   var path = ds_map_find_value(async_load, "result");
   if file_exists(path) show_message("Descarga completa");
   }
}
En ese ejemplo simplemente ejecuta un "show message" al descargar el archivo.

Ojo que creo (no estoy muy seguro) que Google Drive tiene un límite de descargas por archivo para evitar saturar el servidor o evitar ataques DDOS. No sé si es un límite en la cantidad de descargas o en la cantidad de KB que estás descargando, te sugiero investigar sobre ello.

Saludos

15
Preguntas y respuestas / Re:RANDOM MUY LENTO
« en: Abril 15, 2020, 01:23:21 am »
Hola nonoroman

Se me ocurre que eso puede estar causado por dos cosas:
1- que en uno de los proyectos el Step Event esté muy saturado de cosas y bajen los FPS al ejecutar el juego.
2- que hayas modificado la Room Speed, entonces los proyectos van a tiempos diferentes.

Verifica ambas y comenta si era alguna de esas o no.

Una cosa más. Algo más efectivo que usar:
random_set_seed(current_second);
Es usar:
randomize()

Saludos

Páginas: 1 2 3 ... 18