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

Autor Tema: [3D] Dibujar primitiva sólo sobre una anterior [RESUELTO]  (Leído 171 veces)

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

Desconectado DarkKRuleR

¡Buenas! Pues veréis, imaginad que yo dibujo una primitiva cuya textura es un círculo. Entonces, luego yo dibujo una segunda primitiva con una forma de estrella desde el centro. Pues básicamente, quiero que sólo dibuje la estrella en aquellos píxeles que se superpongan con el círculo. Es decir, las puntas de la estrella, en caso de quedar fuera del círculo, no se dibujan.

Dudo si se puede con: https://docs.yoyogames.com/source/dadiospice/002_reference/drawing/colour%20and%20blending/draw_set_blend_mode_ext.html, pero no veo en la imagen nada que lo indique...


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado DarkKRuleR

Respuesta #1 en: Enero 12, 2019, 03:18:43 pm
Hago Up! al tema. Lo cerré porque, debido a un cambio de gameplay, no lo necesitaba. Ahora he revertido el cambio y vuelvo a necesitar esto... Gracias >_<


Desconectado Johann

  • Las cosas como son!
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 666
  • Mensajes: 797
  • Agradecido: 101 veces
  • Sexo: Masculino
  • First Class Soldier... 10 años en CGM, 5 como mod
    • Ver Perfil
Respuesta #2 en: Enero 12, 2019, 04:17:27 pm
Si dibujas el circulo sobre una surface, cuando dibujes la estrella debería suceder exactamente lo que quieres.

Cita de: Fenris78
Si un tema os resulta de interes y veis que hay poca información, la mejor solucion no es quejarse o pedir sin pensar, sino sugerir algo bien planteado o aportarlo vosotros mismos.
Cita de: Calio
Somos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.
 


Desconectado FridaFlowers

Respuesta #3 en: Enero 13, 2019, 12:37:49 am
Para recortar la estrella puedes usar surfaces y bm_subtract, primero dibujas la parte que no quieres que se borre, luego el sprite que quieres recortar:
sup = surface_create(64,64)

surface_set_target(sup)

draw_sprite(spr_redondela, 0, 0,0) //dibujas el circulo
draw_set_blend_mode_ext(bm_dest_alpha, bm_subtract)
draw_sprite(spr_estrella, 0, 0,0) //dibujas la estrella
draw_set_blend_mode(bm_normal);

surface_reset_target();
Este codigo te daría la estrella sin puntas, recortada donde cabe el circulo.
Luego deberías, si quieres, usar otra surface para juntar el circulo y la estrella sin puntas para obtener una sola imagen:
sup2 = surface_create(64,64)

surface_set_target(sup2)
draw_sprite(spr_redondela, 0, 0,0) //dibujas el circulo debajo
draw_surface(sup, 0,0) //dibujas la estrella sin puntas
surface_reset_target();
Eso te daría la imagen final en una surface.

No te olvides de eliminarlas para que no ocupen memoria!  :)

 


Desconectado DarkKRuleR

Respuesta #4 en: Enero 13, 2019, 12:59:21 am
¡Muchas gracias! Me ha funcionado perfectamente ^^

Como nota extra: yo luego saqué surface_get_texture para dibujarlo en una primitiva 3D y tuve varios problemas.

- Hay que hacer surface_free DESPUÉS de haber dibujado la textura, o de lo contrario ésta se pierde y crashea a la hora de dibujarla. Al parecer la textura es un puntero a la surface y ésta debe permanecer existiendo cuando uses la textura.
- Debes crear surfaces, set_target, dibujar, hacerles reset_target y surface_get_texture dentro de un evento draw_GUI si estás usando 3D, y luego usarla fuera, o todo falla y deja de dibujar. Las surfaces no funcionan en el evento draw normal.