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

91
Preguntas y respuestas / Re:Juego de Boxeo
Octubre 23, 2015, 10:23:11 PM
Tu juego tiene conflictos con los nombres de los recursos. No se debe usar el mismo nombre para más de un recurso y tampoco debe haber espacios en blanco en el nombre. Para ayudarte (puesto que tengo  :GMS: y no  :GM8:) te pido que por favor modifiques los nombres siguientes:



Te sugiero que para cada nombre uses un prefijo en función del tipo de recurso. Para sprites coloca un prefijo s_ o spr_, por ejemplo,  usa s_nombre_del_sprite en vez de nombre del sprite
92
mouse_x o mouse_y pueden entregar valores fuera del room si parte de la vista está fuera del room.
93
Esta es una manera de obtener la IP local del equipo:

-Crea un servidor udp y luego un socket udp
-Crea un buffer pequeño y envíalo usando un broadcast (da lo mismo lo que contenga)
-borra el socket y el buffer
-en el evento asíncrono Networking rescata la IP de la cual proviene el paquete recibido, que corresponde a la IP del equipo, leyéndola del mapa async_load
-destruye el servidor.

Llevando esto a código:
host=network_create_server(network_socket_udp,64198,1);//puede ser cualquier puerto libre disponible
if host>=0
    {
    var tsock=network_create_socket(network_socket_udp);
    var tbuff=buffer_create(32,buffer_fixed,1);
    network_send_broadcast(tsock,64198,tbuff,buffer_get_size(tbuff));
    network_destroy(tsock);
    buffer_delete(tbuff);
    }


Evento Networking:
ip=ds_map_find_value(async_load, "ip");
network_destroy(host);


La variable ip contendrá la IP local del equipo.
94
A mi me da la impresión de que tienes un loop infinito en alguna parte de tu código que provoca que el juego se congele. ¿Seguro que no cambiaste nada entre tu intento exitoso de ejecutarlo y tu intento fallido?

EDIT: recordé que sigues escuchando los eventos del juego, así que ignora mi comentario de arriba.
95
Sí. De hecho, no requieres usar el prefijo self.
96
Cita de: eams1986 en Octubre 21, 2015, 12:17:01 AM
Tambien puedes hacerlo con virtual keys y dibujas en el draw el boton que quieres que aparezca en pantlla hay tampoco brincara.

Saludos

Esa es la manera más sencilla de hacerlo, pero nonoroman dijo al principio que no usa virtual keys; supongo que tendrá un motivo.
97
Cita de: eams1986 en Octubre 20, 2015, 08:27:53 PM
si lo ubica en el evento DRAw_gui es 100% seguro que no brincara.

Suerte.

Sí, si lo dibuja en coordenadas constantes en DRAW GUI, pero la instancia del botón también hay que hacerla coincidir con el dibujo del botón para que reaccione a las presiones del usuario, por lo que es necesario mover sus coordenadas x,y junto con el view. En vez de dibujar en DRAW GUI el botón y aparte hacer su instancia invisible y moverlo en otro evento, me parece mejor moverlo y dibujarlo en el mismo evento draw (no draw gui). Ya probé moviéndolo en el evento end step y hay un salto, lo que significa que las coordenadas del view se actualizan después de end step para un view que sigue a una instancia. Colocando esto en el evento draw deja de haber un salto:

x=view_xview[0]+50;
y=view_yview[0]+270;
draw_self();
98
Cita de: penumbra en Octubre 20, 2015, 01:37:53 PM
En el evento DRAW GUI dibuja el sprite del botón A
[gml]draw_sprite(spr_botonA, 0,  view_xview[0]+50, view_yview[0]+270)[/gml]

Dado que eso va en el evento DRAW GUI, debiera ir sin referencia a las coordenadas del view:

draw_sprite(spr_botonA, 0,  50, 270)

Si hubiera escalamiento de la application surface (por ejemplo cuando ésta no tiene las dimensiones del display y se está en pantalla completa), habría que dibujar además escalado el sprite. En mi opinión, sería más sencillo descartar el uso del evento DRAW GUI para dibujar y simplemente hacer:

Evento end step del botón:
x = view_xview[0]+50;
y = view_yview[0]+270;


que es lo mismo que hizo nonoroman, pero en el evento end step en vez de DRAW GUI (puede que con eso deje de dar "saltos", aunque no estoy seguro).
99
En la descripción de cada una de esas funciones se indica qué es cada parámetro:

-draw_ellipse: (x1,y1) (x2,y2) son las coordenadas de los vértices superior izquierdo e inferior derecho del rectángulo que circunscribe a la elipse, respectivamente.
-draw_line: (x1,y1) (x2,y2) son las coordenadas de los extremos de la línea
-draw_rectangle: (x1,y1) (x2,y2) son las coordenadas del vértice superior izquierdo y el vértice inferior derecho del rectángulo, respectivamente.

Como ves, esos parámetros son todos coordenadas para definir cada elemento, no son tamaños.
100
Cita de: jodidox en Octubre 20, 2015, 12:57:33 AM
Vaya, me parece muy interesante este tema. Pero casi no entiendo  XD ¿Donde podría conseguir mas información respecto al tema? ¿O me podrías explicar mejor tu?

Es importante primero entender cómo GMS se puede comunicar con un servidor y cómo éste puede responder; en especial se requieren conocimientos de las funciones HTTP de GMS y por otro lado PHP y sus métodos GET y POST. Es difícil explicar aquí este tema y tampoco es que lo domine a la perfección. Puedes encontrar más información acá:

Manual de PHP: http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=70&Itemid=193
Funciones HTTP asíncronas: http://docs.yoyogames.com/source/dadiospice/002_reference/asynchronous%20functions/index.html

Verás que se pueden hacer maravillas con esto. Si tienes dudas más concretas respecto a un asunto y puedo ayudarte, encantado lo hago.
101
Cita de: Juanchobanano en Octubre 19, 2015, 11:52:44 PM
[user]Guacusio[/user] gracias por tu respuesta.
La solución que presentas me parece interesante y realmente funciona, y si se trata de un juego que no pese mucho es perfecta. No obstante y sólo por curiosidad, en caso en que quisiera solo descargar y actualizar ciertos datos del juego (implementar o modificar recursos [objetos, sprites, sonidos, etc]) ¿Cómo podría rescatarlos?

Una forma de hacerlo es reemplazar la página que guarda la versión del juego por una página más elaborada en PHP. En vez de que el juego "lea" la última versión disponible en la página, que sea el juego quien le envíe su versión y la página PHP defina en base a eso qué archivos necesita descargar el jugador; esto se puede lograr con la misma función http_get, agregando a la URL un "apéndice" con la versión, por ejemplo:

get=http_get("http://www.miservidor.com/ultima_version.php?version_juego="+string(version));

Eso le envía a la página PHP la versión del juego para que la procese utilizando como nombre para ella la variable version_juego.

En el evento asíncrono HTTP de GMS, el servidor responderá con un string definido por la página PHP que debe contener los archivos a descargar (por ejemplo separados por un asterisco; eso tiene que ser programado en PHP); luego que el juego sabe qué archivos necesita, los puede descargar mediante http_get_file.
102
Si quieres que el juego verifique si existe una nueva versión, sea para Windows, Android o lo que sea, y le avise al usuario, se puede hacer y en forma gratuita y sencilla. Lo que yo hice para un juego (y funcionó) fue lo siguiente:

-Al principio del juego guardé en una variable la versión (1.2.3 por ejemplo, o 1020003 para facilitar la comparación entre versiones)
-En el servidor hice una página cuyo único contenido fuera un texto con la última versión del juego y otra página con el link de descarga de la última versión.
-En el juego hago un http_get a la página donde guardo el texto con la última versión del juego y rescato ésta en el evento asíncrono HTTP
-Comparo la versión del juego con la versión guardada en la página; si la primera es menor que la segunda, existe una actualización
-Si existe una actualización, se lo indico al usuario y le doy la posibilidad de ir a la página de descarga mediante url_open

Penumbra tiene razón cuando desaconseja cargar imágenes externas al juego, pero tú deberás evaluar si lo que te conviene descargar como actualización es el juego completo o módulos con recursos. La idea que mostré está pensada para descargar el juego completo pero con algunas modificaciones se puede usar para descargar archivos específicos.
103
Dentro de las demos que vienen con GMS, en la sección Advanced hay un ejemplo llamado Lan_Platformer donde se hace lo que buscas. En pocas palabras, lo que hace es crear para cada instancia de juego un servidor tipo UDP específicamente para recibir la información sobre servidores disponibles para jugar; cuando el jugador crea un servidor de juego, este servidor UDP para "escuchar" es destruido y se crea un nuevo servidor tipo TCP que "reporta" mediante un broadcast su existencia a los demás que aún tienen el servidor UDP para escuchar. Por cierto, sólo funciona en red local.
105
Preguntas y respuestas / Re:Juego de Boxeo
Octubre 19, 2015, 07:36:36 AM
Cita de: wilmerroa en Octubre 19, 2015, 06:42:03 AM
Guacusio

Ok, pero al crear la instancia el debe pasar primero al menu de seleccion de escenario, como hago para que NO vaya directamente al escenario o room 1 que es donde va a aparecer el personaje real.

De lo que dices se infiere que al seleccionar personaje se pasa directamente al room de combate. No me queda claro por qué en vez de eso simplemente no haces que vaya al room de selección de escenario. Sería aconsejable que indicaras qué acciones usas, en qué eventos y en qué objetos.