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!.

Autor Tema: como Enviar Surface atraves de buffer ( para mutijugador )  (Leído 847 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado KayasamiX

  • Habitual
  • *
  • Puntos: 64
  • Mensajes: 19
  • Sexo: Masculino
  • Nada es divertido si saves lo que pasa despues.
    • Ver Perfil
Surfaces. esos lienzos que se puede usar para crear un paint windows. es decir que con la surfaces podemos pintalas como queramos.
sera posible enviar las surfaces atraves de buffers, para que los clientes resivan la surface del servidor?

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Black_Cat

Respuesta #1 en: Noviembre 15, 2019, 01:25:43 pm
Y, ponele que si. Supuestamente hay una funcion para eso:

buffer_get_surface(...)

Que convierte la surface en un buffer. De ahi, la mandás normalmente. Nunca intenté hacerlo.  :'(


 
Los siguientes usuarios dieron las gracias a este tema: KayasamiX


Desconectado BssString

Respuesta #2 en: Noviembre 17, 2019, 02:47:32 am
Hola KayasamiX

Tal como dice Black_Cat, en Game Maker existe la función "buffer_get_surface".
Código: [Seleccionar]
buffer_get_surface(buffer, surface, mode, offset, modulo);lo que hace en términos generales es guardar una surface en un buffer.
Lo que hace técnicamente, es que toma el color de cada pixel de tu surface, y lo traduce a un dato de 8bits (valor entre 0 a 255) por cada uno de los 4 canales (rojo, verde, azul, opacidad). Eso significa que por cada pixel de tu surface, se crearán 4 datos u8 que se irán almacenando en tu buffer.

Ten mucho cuidado con esta función, porque está casi en el olvido por los creadores de Game Maker y está re-buggeada en todas las versiones de Game Maker.
Para empezar, si creas un buffer de tipo "grow buffer" como indican en la documentación de Game Maker, no te funcionará. Sólo funciona si el buffer que creas es del tipo "fixed" y lo creas del tamaño exacto que ocupará tu surface en bytes, que es: 4 * width * height. Ej, si tu surface mide 100x50 pixeles, tu buffer debe tener un tamaño de: 4* 100*50 (20000)
Además te va a guardar la imagen invirtiendo los canales, cada Pixel te lo guarda en formato: BGRA (Azul, verde, rojo, opacidad).

Para usar esta función, tanto la surface como el buffer deben estar creados previamente.
Te recomiendo crear un nuevo buffer momentaneo para almacenar tu surface y eliminarlo después de usarla para no colapsar la memoria.
En los argumentos de esta función: en mode va siempre "buffer_surface_copy" y los campos offset y modulo te recomiendo dejarlos en 0.

Para traducir tu buffer de nuevo a una surface, debes usar la función "buffer_set_surface" que también está bugeada.
En mi PC antiguo me funcionaba, pero este nuevo no. Creo que esta función se basa en el GPU y el problema tiene que ver con mi tarjeta gráfica o alguno de los controladores gráficos de mi ordenador, espero que a tí sí te funcione con normalidad.
Yo ahora re-dibujo las surface manualmente usando "buffer_read"  :-X

Saludos

 


Desconectado KayasamiX

  • Habitual
  • *
  • Puntos: 64
  • Mensajes: 19
  • Sexo: Masculino
  • Nada es divertido si saves lo que pasa despues.
    • Ver Perfil
Respuesta #3 en: Julio 02, 2020, 05:56:38 pm
me puedes andar un codigo completo osea un ejemplo porfa