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

31
Se me ha venido una duda, y es que en mi juego "Ant War Simulator", el room es relativamente grande (10240 x 10240). Pues obviamente no ves todo el mapa, ves una parte, como cualquier RTS como Age of Empires. La prwgunta es, tengo que poner una condicion en el evento Dtaw de todos lo objetos para que solo hagan draw_self() si se encuentran dentro de la room?

No puedo desactivarlos ya que al tratarse de un RTS... no se puede

Muchas gracias :)
32
Preguntas y respuestas / Re:duda con sprites
Diciembre 20, 2018, 12:25:51 AM
Cita de: abelsein en Diciembre 19, 2018, 10:26:54 PM
tengo una duda, como podria hacer para que cuando mi player agarre un objeto o algo por el estilo este cambie su skin por completo? puedo hacer que mi obj player se transforme en otro obj player que tengo pero con diferentes sprites?

Claro, puedes cambiar el sprite del objeto con sprite_index.

Por ejemplo si Mario coge una flor de fuego, cambia a uns skin de fuego. Pues en el código, cuando detecta que ha cogido esr objeto poner sprite_index = spr_mario_fuego

Luego ya tienes que ir jugando con esto si tienes diferentes animaciones para cada uno
33
A ver, es que hay una cosa que no sabeis, y creo que mejoraria la optimización. Es el hecho de que realmente no necesito enviar constantemente la posicióbn. Ya que las hormigas salen del hormiguero y se dirigen a una cierta posición mediante un pathfinding de grid, por lo que si mando que la orden de que en todos los clientes, ese hormiguero empiece a sacar hormigas en esa dirección, y otros parámetros, ya estaría hecho, ya que cogerian el mismo path igualmente. No se si me explico jaja.

Cosas como si una hormiga esta IDLE, y se le acerca una cucaracha, esta deberia atacarla, y se veria en todos los clientes, ya que debería estar en la misma posición y tal.

Se nota que en este tema voy perdido jaja, me miraré el curso de Tigerito019 cuando tenga tiempo.
34
No puedo usar esas cosas ya que el juego saldrá tambien para iOS
35
No he podido leer el post, lo he mirado por encima. No se si pides también que si la bola se queda entre dos boost, pierda. Para eso podrias aprovechar las variables lastx y lasty. Y en el step o una alarma pones:

if (lastx == x && lasty == y) {
    //ESTÁ QUIETA
}


Por otro lado, podrias poner que si la bola detecta que está colisionando con dos boosts, Y ADEMAS, lo juntas que solo pase si la bola está quita. Desactivar uno de los boosts.

No se si te servirá.
36
Preguntas y respuestas / Re:Una duda!
Diciembre 12, 2018, 07:53:26 PM
Para un juego de PC es complicado, lo único que se me ocurre son:
- Micropagos dentro del juego
- Pagar para comprar el juego
- DLCs
37
Cita de: Black_Cat en Diciembre 11, 2018, 11:44:50 PM
Hola colega, pasate por mis tutoriales, ah no, asi no era XD

ya en serio, si vas a hacer un juego en tiempo real , te conviene de sobrada una conexion UPD, la TCP retrasa todo porque es un protocolo que verifica que se haya enviado el paquete completo sin romperse.
En cambio el udp envia datos todo el tiempo sin importar cual iba primero segundo, o si se perdió por ahí. Lo cual no importa mucho realmente ya que, una instancia al moverse tanto por el mapa es imperceptible o a lo sumo se genera eso que la gente llama "lag" que le dispara al enemigo pero este desaparece un segundo y re-aparece mas adelante.

No te recomiendo para nada usar mis tutoriales de TCP, jugar algo en tiempo real con eso va a ir super lento.


EDit: bueno, veo que publicaste como 5 segundos antes xD
Lo que deberías hacer es si, establecer un servidor que pueda alojar partidas. Un servidor que reenvie los datos del juego, porque muchas veces uno mismo como jugador no puede (o lo mas usual, que no sabe) abrir puertos, configurar el firewall. Es mas, los juegos triple A, usan varios puertos a la vez, no uno solo. Entonces deberías configurar el servidor para tener los puertos abiertos.
Sino sería hacer un Hole Punching para conectar sin mucho trabajo:
https://en.wikipedia.org/wiki/Hole_punching_(networking)


Con respecto a qué enviar al servidor.
Lo ideal sería mandar una señal cuando se ejecute cierta condicion. Por ejemplo, una vez que se haya atacado al hormiguero, el hormiguero del cliente debería enviar esa señal al servidor y entonces el servidor debería repartir la misma señal a los otros hormigueros.
Basicamente:
1-Cliente1 ataca hormiguero.
2-El hormiguero de cliente1 envia al servidor la señal.
3-El servidor retransmite a todos los demas clientes.
4-Los otros clientes reciben la señal.
5-Los hormigueros en los otros clientes, comienzan a generar hormigas.

En un principio debería funcionar, pero el problema es que si se pierde el paquete, por ejemplo desde el cliente al servidor. Solo el cliente que crea las hormigas va a verlas salir. Mientras que los demás nunca recibirían la señal que se perdio en el trayecto.
Lo mismo podría pasar si desde el servidor se pierde el paquete hacia algún cliente.
A mi, me parece que deberías reducir las coordenadas a un dato pequeño, quiza un shortInt, ya que la resolucion no pasaria de los 2000px entonces ocuparía menos bytes, no se cuanto ocupa eso, en C al menos sé que son 2 bytes, mas otros 2 para la coordenada y, serían 4 en total por cada instancia. Poniendole que sacas 500 hormigas, algo un poco inusual, 2000bytes que son a lo sumo 2kb? Solo enviando hormigas. Yo CREO que no debería representar un problema. CREO

De todas maneras sería cuestion de probar eso sino alguna optimizacion, por ejemplo enviar la mitad de las posiciones en un step, la mita en otro, si total, es practicamente irrelevante tener la posicion exacta de cada hormiga. No así su estado de vida/muerto.


Otra cosa que recomendaba siempre el makero Texic, al hacer este tipo de juegos, era, enviar la señal para que se creen las instancias en los demas clientes, y que cada uno haga el calculo por si mismo. Lo cual puede ser el camino mas largo, pero iría bastante fluido el trafico de red.

Vale, bueno, a decir verdad estoy algo perdido. Suerte que tengo un tutor de seguridad informática que sabe como funcionan estas cosas. Voy a plantear una cosa y a ver si tiene sentido;
- Compro un servidor y hago que pueda alojar varias partidas.
- Los clientes se conectan una partida del servidor.
- El servidor me sirve para enviar datos entre los clientes.
- Yo soy cliente 1, y decido enviar hormigas a un cierto lugar, así que pulso en la orden, y en vez de procesarla en el propio cliente y luego enviarla al servidor, la envio directamente al servidor, para que este envie los paquetes a TODOS los clientes, así si el paquete se pierde en el envio, el cliente que lo ha enviado no procesará la orden de enviar hormigas.
- Mi mayor duda es, todos los clientes tienen las instancias? Ya que por ejemplo, yo soy cliente 1 y estoy atacando a una hormiga de cliente 2, tendria que enviar un paquete desde cliente 1 a cliente 2 diciendo que he dañado a esa hormiga? Y por ejemplo si la hormiga de cliente 2 muere, enviar un paquete para que cliente 1 elimine esa hormiga?

Muchas gracias
38
Es en tiempo real, y usaré UDP. Y deberé montarlo en un servidor para que no tengan que abrir los puertos y sea mas estable.
39
Lo que pasa es que me interesa que un jugador haga de servidor y a la vez juegue, realmente no son 2 jugadores, sino 4.
40
He visto este artículo, me ha parecido bastante interesante y explicativo:
http://www.comunidadgm.org/articulos/(programacion)-hacer-un-juego-multijugador-online-con-game-maker-studio/

Con eso sigo teniendo unas dudas:
- El método que dije es correcto? El cliente solo envia ordenes, y todo lo procesa el jugador que hace de servidor.
- Un juego online casi nunca te pide la IP para jugar, no se si es posible que por ejemplo, cuando creas un servidor, se guarda en una base de datos la IP con la que se ha creado el servidor, el puerto y la ID del jugador. Así el cliente puede decir de conectarse a ese jugador, enviar una petición a la base de datos y obtener la IP y el puerto. Supongo que para obtener la IP al crear el servidor hay que usar PHP, lo que pasa es que no se deberian abrir los puertos o algo asi? Y funcionaria usando datos móviles?
41
Buenas comunidad,

Desde que llevo en GM, pocas veces me he interesado en el tema de multijugador, ya sea porque no me interesaba, no estaba listo o no creía que GameMaker estuviese listo. Tengo un juego de hormigas, en el cual me está gustando como va quedando (está en Google Play bajo el nombre de "Ant War Simulator LITE"). Un juego donde tu controlas un hormiguero y tal, y tienes que luchar contra otros hormigueros.
Me gustaría poder hacer que una persona pueda conectarse a otra, es decir, uno de ellos hace de servidor, y el otro de cliente. El problema es que no sabria que vincular;
Si tu quieres ordenar que tus hormigas ataquen una cucaracha por ejemplo, envia una señal a la IA del hormiguero y empieza a enviar hormigas, deberia hacer que si el cliente pulsa el botón de atacar, esta señal se envie al servidor? Así no tendria que sincronizar la posicion de todas las hormigas, junto a su comportamiento y tal, que pueden ser cientas en el mapa.

Muchas gracias
42
Preguntas y respuestas / Re:Error Android
Diciembre 10, 2018, 11:10:42 PM
Yo lo he arreglado hace 20min jaja, aquí tienes la solución: https://help.yoyogames.com/hc/en-us/articles/360020501832
43
Juegos en desarrollo / Re:Ant War Simulator
Diciembre 02, 2018, 09:19:02 PM
Ya he actualizado el post con las nuevas imágenes, espero que os guste :)
44
En el objeto del jugador:

Evento CREATE:

colisionando = false;


Evento STEP:

if (place_meeting(x, y, obj_arma)) {
    colisionando = true;
} else {
    colisionando = false;
}


Evento DRAW:

if (colisionando) {
    draw_text(x, y, "LETRA");
}


Claramente en un futuro deberás ajustar el código para saber contra que está colisionando, y dependiendo de eso, mostrar una letra u otra.
45
Juegos en desarrollo / Re:Ant War Simulator
Noviembre 29, 2018, 12:00:02 PM
Cita de: kostra en Noviembre 27, 2018, 07:41:09 PM
probablemente será la pestañita del armv7 y ya está, avísame cuando esté lista tal versión

Que va, es un error que había en el Runtime 2.2.0.258, generalmente los Android 6.0 recibían ese error, luego había otras versiones que también les pasaba. En la 2.2.0.261 se arregla.