Noticias

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

* Sponsor

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

Páginas: 1 2 3 ... 100
1
Preguntas y respuestas / Re: Optimizar creación de sprites
« en: Mayo 15, 2022, 01:51:47 am »
#macro ANCHO 640
#macro ALTO 480

var buff = buffer_create((ANCHO * ALTO) * 4, buffer_fixed, 1);
buffer_seek(buff, buffer_seek_start, 0);
for(var b = 0; b < ALTO; b ++)
{
    for(var a = 0; a < ANCHO; a ++)
    {
        alfa[a, b] = irandom_range(0, 255);
        color[a, b] = irandom(c_white);
        buffer_write(buff, buffer_u8, color_get_red(color[a, b]));
        buffer_write(buff, buffer_u8, color_get_green(color[a, b]));
        buffer_write(buff, buffer_u8, color_get_blue(color[a, b]));
        buffer_write(buff, buffer_u8, alfa[a, b]);
    }
}

s = surface_create(ANCHO, ALTO);
buffer_set_surface(buff, s, 0);

Vale, esto sí que funciona.

2
Preguntas y respuestas / Re: Optimizar creación de sprites
« en: Mayo 14, 2022, 01:39:02 pm »
Voy a dar un ejemplo. Imaginemos este código:

#macro ancho 640
#macro alto 480

for(var a=0; a<ancho; a++)
    for(var b=0; b<alto; b++){
        alfa[a,b]=random_range(0,1)
        color[a,b]=irandom(c_white)
   }


¿Como sería el código para convertir esta matriz en un sprite usando buffer_set_surface?

3
Preguntas y respuestas / Re: Crear un fichero png mediante código
« en: Mayo 14, 2022, 01:18:14 pm »
Pues la función sprite_save me resulta una buena opción para guardar el sprite. Gracias.

4
Preguntas y respuestas / Re: Optimizar creación de sprites
« en: Mayo 14, 2022, 01:34:01 am »
Sí, puedes usar un buffer, parecido al scrpt que usabas para cargar en tú otro post, pero acá escribes. Usa la función buffer_set_surface en lugar de get...

Otra opción puede ser un shader para cada brocha y que actualice una superficie, usas un uniform para introducir la posición del mouse, eso sería muy rápido, pero igual no tan versátil. Yo creo que con la otra opción ya debes tener suficiente rendimiento  ;).

¿Y como haría eso, para ser más exacto?

5
Preguntas y respuestas / Optimizar creación de sprites [Solucionado]
« en: Mayo 14, 2022, 12:47:13 am »
Verán, estoy desarrollando un editor de sprites, pero tengo un problema.
La cosa es que para ello tengo 2 matrices. Una para el color del pixel y otra para el alfa del pixel.
Con estas creo un sprite que llamaremos ima, que es lo que se muestra en pantalla.
Pero este es el código cuando quiero crear el sprite:
    var super=surface_create(ancho,alto)
    surface_set_target(super)
    draw_clear_alpha(0,0)
    for(var a=0; a<ancho; a++)
        for(var b=0; b<alto; b++){
            draw_set_alpha(alfa[a,b])
            draw_point_color(a,b,color[a,b])
        }
    draw_set_alpha(1)
    if(ima!=-1)
        sprite_delete(ima)
    ima=sprite_create_from_surface(super,0,0,ancho,alto,0,0,0,0)
    surface_reset_target()
    surface_free(super)

Este código es bastante lento. ¿Alguien sabe algo más eficiente para generar un sprite?

6
Preguntas y respuestas / Re: Crear un fichero png mediante código
« en: Mayo 10, 2022, 11:37:41 pm »
Daré más información sobre mi problema.
Tengo unos objetos Pixel que representan cada pixel de la imagen.
Cuando guardo una imagen, recurro a esto:

var super=surface_create(ancho,alto)
surface_set_target(super)
draw_clear_alpha(0,0)
with(Pixel){
   draw_set_alpha(image_alpha)
   draw_point_color(a,b,image_blend)
}
draw_set_alpha(1)
var custom=sprite_create_from_surface(super,0,0,ancho,alto,0,0,0,0)
surface_save(super,fichero)
surface_reset_target()
surface_free(super)
sprite_delete(custom)


Y este es el código tras cargar la imagen:

var super=surface_create(ancho,alto)
surface_set_target(super)
draw_clear_alpha(0,0)
draw_sprite(custom,0,0,0)
surface_reset_target()
      
var bufo=buffer_create(4*ancho*alto,buffer_fixed,1)
buffer_get_surface(bufo,super,0)
surface_free(super)

var sitio, num
for(var an=0; an<ancho; an++){
   for(var al=0; al<alto; al++){
      sitio=global.pixel[an,al]
      num=buffer_peek(bufo,4*(an+al*ancho),buffer_u32)
      with(sitio)
         previamente()
      sitio.image_alpha=(num>>24)&255
      sitio.image_blend=make_color_rgb(num&255,(num>>8)&255,(num>>16)&255)
   }
}
with(Pixel)
   image_alpha/=255
buffer_delete(bufo)
sprite_delete(custom)


Ya de por sí debo veo un error que multiplica por 255 el alfa de la imagen. Pero la cosa es que entre tanto el guardado como el cargado reducen el alfa de los píxeles si este es inferior a 1, tal como muestro en las imágenes de ejemplo.

7
Preguntas y respuestas / Re: Crear un fichero png mediante código
« en: Mayo 09, 2022, 01:18:09 am »
He detectado un error en la forma que uso para guardar el sprite.
Si un pixel tiene un alfa menor que uno, eso hará que los colores pierdan valor.
Por ejemplo, si el valor de azul del pixel es 255 y el alfa es 0'5, pues el azul del sprite guardado será 127. Y el valor del alfa será 0'25.

8
Es poco eficiente, y me causa errores debido a la pantalla completa.
Encontré otro método que es más eficiente:

var buffer=buffer_create(4*sprite_get_width(sprite)*sprite_get_height(sprite),buffer_fixed,1)
buffer_get_surface(buffer,surface,0)
surface_free(surface)
var num=buffer_peek(buffer,4*(mouse_x+mouse_y*sprite_get_width(sprite)),buffer_u32)
var alfa=((num>>24)&255)/255
var color=make_color_rgb(num&255,(num>>8)&255,(num>>16)&255)
buffer_delete(buffer)

Sin embargo, la variable image_alpha me genera errores. Por ejemplo, si el valor image_alpha debería ser 1, en su lugar lo pone como 255.
Probé a dividir entre 255, pero tampoco funciona, porque si mi pixel tiene alfa menor que uno lo devuelve con un alfa inferior al que debería.
Puede que este error se deba a los decimales...

9
Estoy interesado en coger un pixel de un sprite y sacarle el "image_blend" y el "image_alpha" de dicho pixel.
Hay funciones para sacar valores como el ancho y el alto del sprite y hay funciones para manejar de varias formas el sprite, pero no he encontrado nada sobre coger un sprite, sacar un pixel y sacarle estos valores.

10
Ya encontré una manera de hacerlo:

var super=surface_create(ancho,alto)
surface_set_target(super)
draw_clear_alpha(0,0)

for(var b=0; b<alto; b++)
for(var a=0; a<ancho; a++){
   draw_set_alpha(alfa[a,b])
   draw_point_color(a,b,make_color_rgb(rojo[a,b],verde[a,b],azul[a,b]))
}
draw_set_alpha(1)
var custom=sprite_create_from_surface(super,0,0,ancho,alto,0,0,0,0)
surface_save(super,"test.png")
surface_reset_target()
surface_free(super)
sprite_delete(custom)

11
Preguntas y respuestas / Crear un fichero png mediante código
« en: Mayo 07, 2022, 03:47:31 pm »
Verán, quiero crear un fichero .png en game maker mediante código, sin usar el editor de sprites.
Digamos que tengo estas variables:

rojo[0,0]=23
rojo[0,1]=210
rojo[1,0]=100
rojo[0,1]=13

verde[0,0]=14
verde[0,1]=30
verde[1,0]=200
verde[0,1]=159

azul[0,0]=255
azul[0,1]=0
azul[1,0]=3
azul[0,1]=99

alfa[0,0]=0.45
alfa[0,1]=1
alfa[1,0]=0.20
alfa[0,1]=0.91


Pues la cosa es generar un fichero .png tamaño 2x2 cuyos píxeles sigan estos parámetros.

12
Juegos completos / Re: Ehala Auapau
« en: Mayo 04, 2022, 06:45:35 pm »
Vale, veo que finalmente lo lograste.
Sinceramente, no se para qué necesitas una sombrilla. Vas a una isla llena de monstruos para un peligroso ritual de madurez, no de vacaciones de verano.  XD

Aparte, ¿Consideras al protagonista alguien noble? Bueno, yo lo imagino más bien pícaro. Fue mi compañero quien lo inventó, y a mí me gustó por hacerme venir a la mente las estafas de príncipes exóticos que te piden dinero con la promesa de en el futuro recibir mucho más (sí, vaya con las cosas que me vienen a la cabeza XD).

Revisando tus críticas he podido realizar algunas mejoras, incluido solucionar fallos de programación.
De tu crítica, lo interesante es la falta de alcance que notas a las armas.

Aunque era algo que ya sabía e hice balances para corregirlo durante el desarrollo, también ten en cuenta que el juego sería demasiado fácil si diese demasiado alcance. Además, la cosa es que empiezas con una espada, que es un arma que a posta tiene poco alcance. La cosa ya mejora con el martillo.
A ver si algún día lo reviso, cuando esté libre, pues ahora estoy con otras cosas.

13
General / Re: Mi galeria de imagenes
« en: Abril 28, 2022, 07:11:26 pm »
Tienen su gracia esos dibujos.
¿Vas a continuar con otros miembros de esta página web?
Hubo un tiempo que se hacían juegos basados en nuestra comunidad.
Sería interesante ver otro juego y los personajes que nos representan tuviesen tu estilo.

14
Juegos completos / Re: Ehala Auapau
« en: Abril 19, 2022, 09:06:55 pm »
Finalmente el juego está completamente completado, con varias novedades, como una mejor IA enemiga, el personaje puede atacar en diagonal, haciendo más cómodo el combate, mejor efecto de oscuridad, etc.

15
Vale, este serían el modo de hacer un efecto de iluminación con superficies:

Crear Superficie.
surf=surface_create(room_width,room_height)

Evento draw.
draw_self()
surface_set_target(surf)
draw_clear_alpha(c_black,0)
draw_set_color(c_black)
draw_rectangle(0,0,room_width,room_height,0)
gpu_set_blendmode(bm_subtract)
draw_set_alpha(0.10)
for(var i=0; i<10; i++)
   draw_circle(x,y,100+i*5,0)
draw_set_alpha(1)
gpu_set_blendmode(bm_normal)
surface_reset_target()
draw_surface(surf,0,0)


Destruir Superficie.

surface_free(surf)

Páginas: 1 2 3 ... 100