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.


Mensajes - Black_Cat

Páginas: 1 2 3
1
Preguntas y respuestas / Re:Duda Networking
« en: Agosto 09, 2019, 06:07:55 am »
Bien primero respuesta corta, si.
Ahora la respuesta larga es que se complica. Se puede conectar dos pc desde cualquier parte del mundo con el networking de Game Maker.Tambien se pueden conectar de la misma red local con cable y wifi.

A diferencia de la red local LAN, con la red WAN es que en la red LAN es todo transparente entre dispositivos, porque se supone es una red segura.
El problema com la rede WAN son los firewalls que hay que desactivar para que entren conexiónes, es decir, el servidor tiene que dejar paso a las conexiones exteriores entren a su PC lo cual es complicado y a la vez peligroso.
Pasando del tema, seguridad informática, abrir un server para WAN es tedioso porque primero se debe configurar una excepción en el firewall del sistema operativo, y ya despues hay que hacerlo en el firewall que trae el router de internet. Lo cual, en el mejpr de los casos se puede configurar usando una IP que te da proveedor de internet con usuario y contraseña. O en el peor de los casos quien lo administra es la misma empresa, y hay que llamar al servicio técnico en linea para que te habiliten los puertos específicos que hayas determinado al momento de programar el juego.

Hay otros métodos para evitar tanta configuración y es lo que se llama hole punching, incluso hay librerias o extensiones para gms. El inconveniente es tener un servidor dedicado.

Los siguientes usuarios dieron las gracias a este tema: M Games

2
Preguntas y respuestas / Re:Objeto muere cuando sale de la cámara
« en: Julio 07, 2019, 02:21:37 am »
hay un evento específico para eso en la parte de eventos en la pestaña "other" si no me falla la memoria, donde hay uno que pon" outside view" que se lanza cuando la instancia se queda fuera de la view.
y bueno , luego de seleccionado el evento harías el trabajo pertinente
Los siguientes usuarios dieron las gracias a este tema: inventarium

3
probaste usando:  event_perform(ev_other, ev_user0) ?
o en su defecto: event_perform_object(objeto, ev_other, ev_user0) ?
Los siguientes usuarios dieron las gracias a este tema: Marth

4
Preguntas y respuestas / Re:Unión de objetos
« en: Julio 03, 2019, 01:48:54 pm »
Me acuerdo que eso se solucionaba en los gm8 poniendo el codigo en "end step".
Los siguientes usuarios dieron las gracias a este tema: inventarium

5
Preguntas y respuestas / Re:IA en multijugador online
« en: Julio 01, 2019, 04:25:42 pm »
En un principio, el servidor podría ser quien gestiona la IA y manda las actualizaciones a los clientes. Si uncliente se desconecta no pasa nada, ahora si el servidor se muere, logicamente todos los jugadores dejarán de poder jugar. Lo usual, basicamente.
La fornma en que se deberia estructirar es 1 sevidor y n clientes. No el usual cliente/servidor que a la vez que juega administra, dentro del mismo proceso, al servidor. deberían estructuralmente ser procesos distintos dentro de la misma maquina si se quiere, o en otra aparte.
eso si, el servidor tiene que tener una conexion buena para administrar los datos entrantes, esto en cuando a capacidad de carga y descarga que tenga la red de internet. Y por otro lado, un procesador que se banque , justamente el procesamiento de los datos... que claro, es tambien lo usual, basicamente.
La idea de transmitir datos es dejarlo en la minima expresion, me acuerdo cuando trabajaba con una user de acá con la 39DLL, ésta traia funciones para enviar determinados tipos de datos, cuya abstraccion era proxima a C, y los tipos de datos a manipular eran tan pequeños que llegaban a 8bit, de los cuales si se operaban de forma optima podias usarlo como un 8 bits sin signo, lo cual le da más margen para representar datos.
nosotros lo que haciamos era, usar uno de 16bits sin signo y al menos en GM8 las instancias tenian la forma aproximada de: 100513, obviavamos el 100 inicial, metiamos la id dentro de los 2bytes y dentro de eso poniamos unos cuantos numeros extras que indicaban el socket de donde provenia el mensaje, y una accion extra, codificada claro, para indicar si tenia que destruirse, moverse, o algo por el estilo.
Y bueno un montonaaaaazo de optimizaciones extra como que el servidor era quien mapeaba el nivel, hacia una lista con los objetos que se podian llegar a destruir y los mapeaba. Luego los movia/destruia segun llegaba la orden o se procesaba. Para ls elementos que se movian solos, por ejemplo plataformas moviles, eso lo administraban los clientes. En el peor de los casos, si alguno se llegaba a desincornizar lo que haciamos era un promedio entre las posiciones de todos estos elementos y los actualizabamos, lo cual a veces hacia que se pegara un lagazo cada q se conectaba alguien, pero era lo que habia xD

Un monton de cosas pueden pasar dependiendo de lo que requiera tu juego, qué cosas hacen falta sincronizar y que otras no, o lo minimo.
Pero siempre tratando de enviar al server o a los clientes, una cantidad de datos que sea optimo y rapido.Para no generar ese cuello de botella. Y aqui es donde entra la cuestión de usar UDP, además.
Los siguientes usuarios dieron las gracias a este tema: Johann

6
Preguntas y respuestas / Re:Game Maker MMO
« en: Junio 28, 2019, 06:56:27 pm »
Aqui en el mismo foro, solo que primero tendrias que saber dominar varias cosas.
En la programacion en general para resolver un problema mas grande primero hay que dividirlo en partes mas pequeñas, lo que se conoce como modularizar.
Bueno primero deberias descomponer tu problema en sub-problemas mas pequeños que puedas enfentar.
En este caso, por poner un ejemplo, deberias dividirlo en dos partes: el juego base en si y la transmision de datos online.

En cuanto a como hacer un juego online, fijate hay varios articulos que te pueden ayudar como:
Para hacer la parte online
https://www.comunidadgm.org/articulos/(programacion)hacer-un-juego-multijugador-online-con-game-maker-studio-ver2/
Luego seguramente tengas q crear un sistema de login/registro para que la gente se una al servidor, contás por ejemplo con este otro tutorial:
https://www.comunidadgm.org/articulos/conexion-de-gamemaker-studio-a-servidor-web-php-(programacion)-(resubido)/
Aunque claro, cuando se trata de servidores en la nube, necesitarias saber PHP o algun otro lenguaje de estos.

Y bueno, finalmente, la parte escencial, es el juego, la jugabilidad, etc.
Como base podes leerte este tutorial como guia de cómo hacer que un juego sea divertido.
https://www.comunidadgm.org/articulos/disenando-buenos-juegos-(diseno)/

Una vez planteado un buen mapa de lo que querés hacer sería volver a descomponer los problemas en sub-problemas como:
1- como hacer un inventario
2- como hacer que mi personaje se mueva en 8 direcciones con su sprite correspondiente
3- como hacer que mi personaje no vaya mas rapido en diagonal que cuando lo hace solo vertical/horizontalmente
4- como dibujar corazones en la pantalla y que sigan la camara
5- como hacer una tienda
6- como hacer una mochila
7- como hacer dialogos o cuadros de texto aparezcan letra por letra

cosas tipicas de los juegos mmo basados en rpg, que sea dicho de paso, muchos de esos temas están en el foro con su respuesta adjunta. Sino en el peor de los casos sería preguntar xd
Tambien tenes la posibilidad de conseguir librerias por internet que te hagan el trabajo de networking y conexion a las DB

pero de momento, eso
Los siguientes usuarios dieron las gracias a este tema: yottaomi, Kkunna

7
Preguntas y respuestas / Re:PROBLEMA CON LA MUSICA GAMEMAKER STUDIO
« en: Junio 20, 2019, 01:31:01 am »
Citar
Hola gente. Vengo porque guinxu me recomendó esta pagina, asi que espero que no me fallen

xd antes cuando mega-G se pasaba por aca era mejor sitio

Citar
Necesito que me ayuden con un problema de GameMaker 1.  Yo tengo 2 archivos de audio: 1-Musica de fondo 2-Efecto de sonido. Cuando empieza la room, se escucha perfectamente la musica de fondo, pero ni bien se escucha un efecto de sonido, la musica de fondo se detiene. Guinxu me dijo que lo ponga en la carpeta Background Music, pero esta no existe o no la encuentro.

intenta cambiarle los numeros de prioridad
audio_play_sound(snd_fondo, 1, true);
audio_play_sound(snd_sonido, 2, true);
Los siguientes usuarios dieron las gracias a este tema: Superwash1

8
Preguntas y respuestas / Re:Busco una comunidad en discord Game Maker
« en: Junio 19, 2019, 05:25:33 pm »
podes unirte al nuestro (clickea mi firma chernobyleana)

aunque poca gente se copa armando grupos para programar jueguitos. Como que la onda es hacer algo solo, no se...
Los siguientes usuarios dieron las gracias a este tema: Superwash1

9
Preguntas y respuestas / Re:Background Borroso
« en: Junio 16, 2019, 03:59:42 am »
me acuerdo que hace mucho le paso algo parecido a un amigo

su caso era el siguiente, tenia un bakground muy grande, ponele de 1500x1200.
y lo que pasaba es q Game Maker, mete todos los graficos en una pagina de texturas, que por lo general, si no me acuerdo mal tiene como 1280x1024 o algo asi, por decir algo
entonces el game maker, metia el fondo en esa pagina que al tener dimensiones mas pequeñas, se desfiguraba el fondo. Luego par amostrarlo en el nivel lo estiraba de nuevo entonces se veia borroso.

la solucion... creo que era agrandando la texture page desde la configuracion de Game maker, en la parte donde dice graficos.
intentá... en una de esas, funca.
Los siguientes usuarios dieron las gracias a este tema: THE_ALS12

10
Para poner el codigo GML tiene que ir asi:
Código: [Seleccionar]
[GML]
//codigo
[/GML]
y queda:
//codigo


El codigo que probé funciona perfectamente. En mi caso lo probé como sigue:
Evento create:
variable = 5
alarm[0] = 60
evento alarm0
var a,b;

variable = 8

a = instance_create(100, 0, object0)
b = instance_create(200, 0, object0)

a.variable = self.variable
b.variable = self.variable

instance_destroy();
evento draw:
draw_text(x,y, variable)

Y se cambia perfectamente el valor de las variables a 8 y crea las intancias con dicho valor.
A lo mejor tenés algun codigo que esta conflicuando desde otro lado.
Los siguientes usuarios dieron las gracias a este tema: HexPol

11
Lo que tienes que hacer es asignar uno a uno los atributos a las intancias creadas.
Por ejemplo si yo tengo un obj_perro:
ev_Create
//Evento Create del obj_perro
raza = ""
Inicialmente mi objeto es un perro indefinido, pero me apetece darle una raza en cualquier momento:
//por ejemplo, Alamra0 del obj_perro
raza = "dalmata"
Luego querría crear dos instancias, para ello, necesiarías usar instance_create() y almacenar las instancias nuevas, dentro de variables:
///cualquier evento dentro de obj_perro
dalmata1 = instance_create(x,y, obj_perro)
dalmata2 = instance_create(x,y, obj_perro)
Después tendrías que asignar, como se dijo al inicio, los atributos uno a uno:
///cualquier evento dentro de obj_perro
dalmata1 = instance_create(x,y, obj_perro)
dalmata2 = instance_create(x,y, obj_perro)

dalmata1.raza = self.raza  
dalmata2.raza = self.raza
Asi asignarias a cada instancia el mismo atributo que tiene el objeto, que las crea.
Luego bastaría con que lo eliminaras:
///cualquier evento dentro de obj_perro
dalmata1 = instance_create(x,y, obj_perro)
dalmata2 = instance_create(x,y, obj_perro)

dalmata1.raza = self.raza  
dalmata2.raza = self.raza

instance_destroy()
Finalmente tendrías un objeto perro, que fue modificado y creó otras 2 instancias modificadas, y luego se destruyó.

Citar
Sé que me explico como un libro cerrado y me ando por las ramas
Lo mejor que podés hacer para explicarte, es poner ejemplo de lo que estás haciendo y lo que querés lograr finalmente.
Pasa mucho de hecho, lo vi en otros foros, de que la gente gasta más tiempo intentando pedir perdon que intentando poner ejemplos para darse a entender XD
Los siguientes usuarios dieron las gracias a este tema: HexPol

12
Preguntas y respuestas / Re:Mover una view al tocar un objeto
« en: Abril 16, 2019, 04:15:13 am »
Creo que ocurre , porque al estar la verificacion de colision dentro del evento step, cada vez que se superpone un borde, la x_view se aumenta.
Por lo que el personaje pasa por encima y la x_view se aumenta muchas veces.

tengo dos soluciones:
1) tendrias que mover al player a una distancia grande de manera que deje de tocar el borde y consecuentemente deje de moverse la x_view al no cumplirse la condicion de colision
2) usar una variable booleana que indique que ya se tocó el borde para no seguir moviendo indefinidamente la x_view
Los siguientes usuarios dieron las gracias a este tema: ElKopiraih

13
amigo te dejo un grafico de como funciona el ciclo for en 4 pasos:
El ciclo for es eso, un ciclo, que se reptite contadas veces. En programación se conoce como "ciclo definido o ciclo finito" puesto que se sabe, cuantas vueltas va a dar el ciclo de antemano.
En nuestro ejemplo del inventario iba a dar 4 vueltas.

analizemos la estructura  de FOR:

1º) se crea una variable contador, generalmente y por comodidad, en muchos lugares se la llama "i" del "iterator" en español iterador. Que es la variable que cuenta las iteraciones(repeticiones de codigo).
Esta parte se ejecuta 1 sola vez. Declara la variable para usarla como contador.

2º) la condicion que repite el ciclo. Esta parte se ejecuta varias veces y te indica la condicion que tiene el ciclo para seguir ejecutandose. Generalmente es un numero entero o una expresion de "i es menor a 10" y de ese estilo para que el ciclo se repita determinada cantidad de veces.

3º) aqui se ejecutan las acciones que se quieren repetir. Todo el codigo dentro se repite cada vez que el ciclo da vuelta.

4º) aqui se aumenta (o disminuye) el contador de manera de que se vaya sumando éste y termine en algun momento la condicion.
Por lo general se le suma de a 1 , raras veces vá hacia atrás o se suman en mas cantidad.
Luego de este 4º paso se vuelve a repetir el 2º paso y así, hasta que la condicion deje de cumplise.

Un ejemplo:

for(i=0; i<2; i++){
         instance_create(o_nave_enemiga, x,y)
         audio_play_sound(snd_campana,1,0);
}
1) Este codigo inicializa la variable "i" en cero.
2) Verifica si la condicion es verdadera. "i" es menor a 3? en efecto, puesto que es igual a cero.
3) se crea una nave espacial y hace un sonido
4) aumenta el contador en 1 (i++ o bien se puede escribir como i+= 1), ahora vale 1
5) se verifica la condicion: "i" es menor a 3? en efecto, puesto que es igual a 1
6) se crea una nave y se hace un sonido
7) se aumenta el contador "i" en 1, ahora vale 2
8 ) se verifica la condicion "i" es menor a 2? no, puesto que es igual a 2, y 2 no es menor a 2.
9) termina el ciclo sin ejecutar acciones. No se vuelve a entrar en él

Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

14
hola amigooou

hay dos maneras de trabajar con arreglos(vectores, arrays, listas, etc).
una es usando los arreglos convencionales de gm:   vector
la segunda es usando listas dinamicas de gm: ds_list_create()

yo te voy a explicar usando arreglos estandar.

primero hay que declarar el arreglo e inicializarlo con un valor que nos indique que esta vacio, por ejemplo vamos a poner el 0:
(Evento Create)
global.MAX = 4; //maximo de slots disponibles en el inventario
for(i=0; i<global.MAX; i++)
      inventario[i] = 0; // el cero indica que no hay nada en el inventario

Esto crea el arreglo con 4 elementos, que son el numero 0 que a efectos practicos, nos indicaria que no tienen items.

Luego, creamos un script desde el panel de recursos, que usaremos para obtener un espacio libre.
scr_obtener_slot
for(i=0; i<global.MAX; i++){  //recorremos el arreglo
      if (inventario[i] == 0)   //si hay un slot que este vacio
           return i;    // devolvemos la posicion que esta desocupada (puede ser 0, 1, 2, 3)
}

return -1;  //en caso de que este todo ocupado, devolveremos el indice -1 que no existe, por lo tanto es un error
Este script nos devolvera el primer indice que esté desocupado. O -1 si esta todo lleno de items.

Luego para dibuijar las cosas tendrias que ir al Evento Draw y colocar algo como:
for(i=0; i<global.MAX; i++){
      draw_sprite(spr_cuadradito_del_inventario, x + (sprite_get_width(spr_cuadradito_del_inventario) * i, y); //esto dibujaria tantos cuadraditos como maximo de slots haya en el inventario
}

for(i=0; i<global.MAX; i++){ //este ciclo dibujaria los items

     if (inventario[i] == "navaja") //si en el espacio "i" hay una navaja, dibujarla
                 draw_sprite(spr_navaja,  x + (sprite_get_width(spr_cuadradito_del_inventario) * i, y);

     if (inventario[i] == "comida") //si en el espacio "i" hay una navaja, dibujarla
                 draw_sprite(spr_comida,  x + (sprite_get_width(spr_cuadradito_del_inventario) * i, y);
}

eso dibujaria el inventario y los items necesarios, Cabe resaltar que los sprites tienen que ser igual tamaño que el sprite que hace de cuadradito en el inventario

Luego la forma de guardar un item, por ejemplo Evento Colision de Player contra Pocima:
var espacio_vacio = scr_obtener_slot();
if (espacio_vacio != -1) //si hay espacio vacio
          inventario[espacio_vacio] = "pocima"

no probe el codigo, pero creo que la idea está
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

15
Preguntas y respuestas / Re:Duda sobre UDP y TCP
« en: Abril 04, 2019, 02:32:53 pm »
Complicado no es realmente, solo que hay que tener en cuenta muchas cosas. Primeo y principal, seria saber sobre como manejar buffers. Puesto que es la manera en que se mandan los datos a trevez del networking en GMS.
Para una explicacion detallada tenés el tutorial de Juca:
https://www.comunidadgm.org/articulos/tutorial-buffers-(parte-1-3)/msg125452/#msg125452

Si querés saber como funciona UDP podés mirar este tutorial de Ashe:
https://www.comunidadgm.org/articulos/tutorial-online-udp-39dll/msg128337/#msg128337
Que si bien usa una vieja DLL, el concepto de como funciona es el mismo. La diferencia con GMS es que tiene un propio evento asincrono para procesar los datos en vez de hacerlo en el evento step.

Si querés una explicacion detallada de como manjar TCP tenés mi tutorial extenso:
https://www.comunidadgm.org/articulos/(programacion)hacer-un-juego-multijugador-online-con-game-maker-studio-ver2/

Ahora, podés leer el tutorial de TCP y tratar de hacer algo con eso.
Una vez que dominés ese protocolo, solo extrapolalo a UDP. Que es en escencia mas sencillo que TCP.

////////////////////////////////////////////////
Revisando la Doc de otro motor(Godot) encontre esto:
https://gafferongames.com/post/what_every_programmer_needs_to_know_about_game_networking/

Está en español de donal trump, pero plantea el asunto el networking bastante especificado para juegos

saludos
Los siguientes usuarios dieron las gracias a este tema: somnus

Páginas: 1 2 3