Saludos Makeros:
Sí, como pueden intuir por el título del tema tengo un problema y esta vez es uno grande... :'(
Realizando pruebas de dibujado sobre superficies me topé con cierto error que quisiera me aclararan. ???
Tengo tres "sprites" distintos (el mismo "sprite" pero rotado en 90 grados cada vez). Sus nombres son sp_1, sp_2 y sp_3 respectivamente. :)
Utilizando un "script" nombrado "sc_2" trabajo dichos "sprites" para modificarlos y crear nuevos "sprites" a partir de ellos. A dicho "script" lo llamo desde el evento "Create". :)
El algoritmo es sencillo: ;)
1. Dibujo el "sprite" "sp_1" en una superficie llamada "surf".
2. Luego, en dicha superficie, le dibujo encima el "sprite" "sp_2", pero en modo subtracción, o sea "draw_set_blend_mode(bm_subtract) ", para recortar la figura del "sprite" "sp_2" del cuerpo del "sprite" "sp_1".
3. Por último, en la misma superficie, dibujo encima el "sp_3" en modo substracción también para recortarle su figura de lo que haya quedado.
4. Lo que quede lo convierto en un "sprite" y lo guardo en la variable "sprite_1".
Debo obtener solo el área del "sp_1" que no coincida con las áreas de los "sprites" "sp_2" y "sp_3". 8)
El algoritmo no se detiene ahí: ;)
1. Dibujo el "sprite" "sp_2" en una superficie llamada "bar". Nótese que no es la misma superficie que la anterior.
2. Luego, en dicha superficie, le dibujo encima el sprite sp_3, pero en modo subtracción, o sea "draw_set_blend_mode(bm_subtract) ", para recortar la figura del "sprite" "sp_3" del cuerpo del "sprite" "sp_2".
3. Lo que quede lo convierto en un "sprite" y lo guardo en la variable "sprite_2".
En el evento "Draw" dibujo ambos nuevos "sprites", o sea "sprite_1" y "sprite_2" en áreas separadas para comprobar que quedaron como debe ser... :)
...pero mi sorpresa es tremenda al darme cuenta que no quedan como debieran. Dicho código no funciona en todas las computadoras de igual manera, los errores varían. :o
Utilizando el botón de la letra "R" se puede reiniciar el juego y comprobar como varía el dibujado. ???
Lo peor es que llega a mostrar partes de un "sprite" que nunca se le ordenó ser dibujado en dicha superficie como muestra la imagen. :-\
Por favor, ¿alguien podría decirme por qué el código no funciona bien? ???
¿Alguien tiene alguna solución para este problema? :'(
adjunto envío el editable en GM8.0 y una imagen con un error imposible ya que las superficies donde se dibujan son distintas... ???
Desde ya les doy las gracias por prestarme atención... ;D
Probé el gmk y todo se dibujó como debería. Tal vez es un bug de GM o un problema de compatibilidad con Windows.
(http://i.imgur.com/wGcHEQR.png)
(http://i.imgur.com/uvw1HEs.png)
Cita de: Clamud en Abril 22, 2016, 06:50:39 PM
Probé el gmk y todo se dibujó como debería. Tal vez es un bug de GM o un problema de compatibilidad con Windows.
Saludos Makero "Clamud":
Muchas gracias por intentarlo... XD
¿Cuál windows usas? Yo lo probé en W8.1 y W7. Aún así se comportó diferente en dos computadoras con la misma edición de windows. ???
Necesito esta funcionalidad para un proyecto, pero temo que se comporte de manera diferente en diferentes usuarios lo cual no es ni remotamente aceptable. :-\
¿Qué está mal? ¿Qué puedo hacer para que un código de GML funcione igual en todas las PC? :'(
¡AUXILIO! ¡ALGUIEN QUE ME AYUDE! :'( :'( :'( :'(
No sé si es a lo que te refieres, pero en mi caso al principio los sprites se crean como deberían, pero al reiniciar con R es posible que aparezcan errores, a veces reiniciara correctamente, y otras veces agrega zonas incorrectas al sprite.
Esto se debe a que solo estas eliminando y recreando las surfaces, no las estas limpiando, entonces es posible que quede data de surfaces anteriores en ellas, usa un draw_clear_alpha(0,0) justo después de cada surface_set_target para limpiar la surface de cualquier data anterior.
Prueba a ver si eso ayuda también con el problema del comportamiento irregular en distintas maquinas.
Cita de: Killer en Abril 23, 2016, 01:22:16 AM
No sé si es a lo que te refieres, pero en mi caso al principio los sprites se crean como deberían, pero al reiniciar con R es posible que aparezcan errores, a veces reiniciara correctamente, y otras veces agrega zonas incorrectas al sprite.
Esto se debe a que solo estas eliminando y recreando las surfaces, no las estas limpiando, entonces es posible que quede data de surfaces anteriores en ellas, usa un draw_clear_alpha(0,0) justo después de cada surface_set_target para limpiar la surface de cualquier data anterior.
Prueba a ver si eso ayuda también con el problema del comportamiento irregular en distintas maquinas.
Saludos Makero Killer:
¡¡¡Le doy un millón de gracias!!! :love: XD :love: XD :love: XD :love: XD
Justo eso arregló completamente mis proyectos.Le daré 10 puntos a Ud en algún tema suyo a modo de agradecimiento. :love:
Espero que a alguien le sirva esta experiencia. 8)
Hasta la próxima Killer...! ;D