Problema con map_put_pixel

Started by lou, November 21, 2009, 03:43:19 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

lou

Buenas!
Preciso de vuestra sabiduría, a ver si me podeis dar una explicación/solución.

Veamos, estoy trabajando en un editor de mapas basado en tiles, donde, de momento, cada tile guarda solo la informacion de color a pintar. Utilizo una matriz de 128x128 tiles. Según el tile en el que clico con el ratón, se modifica su valor de color (todo esto sale OK). Ahora lo que busco es que, si yo clico en mi matriz en la posicion (10,10), en un grafico de 128x128 creado por mí, se dibuje un pixel en la posición (10,10). No se si me habré explicado bien ;/

Mi código, bastante resumido (editado con algun comentario):

 minimapa = new_map(128,128,16); //inicializo el minimapa
//dentro del loop
 IF(mouse.left AND region_raton == _MAPA)
     FOR (x = 0; x < xtiles; x++) //pinta horizontalemnte el nº que marca xtiles
FOR (y = 0; y < xtiles; y++) //pinta verticalmente el nº que marca xtiles
tablero[pos_x + x ][pos_y + y].grafico = 1; //tablero[][] es la matriz que guarda la informacion de los tiles, se le asigna el grafico 1
map_put_pixel(0,minimapa,pos_x + x,pos_y + y,rgb(0,255,0)); //pinta en el minimapa en la misma posicion que pinta en la matriz del tablero
END
END
 END

A ver como explico ese bucleXD
Según el pincel que tengas seleccionado (xtiles) 1x1, 2x2 o 3x3, pinta los tiles que tocan a partir de la posicion del ratón (pos_x, pos_y). Si pongo ese código peta sin dar explicaciones.
No se si será por llamar a map_put_pixel varias veces en un loop, si sera por el modo de color de new_map (en esto voy mas perdido...) o porque.

Espero hayais entendido aunque sea la esencia de lo que pregunto jajaja.

Muchas gracias de antemano!
Saludos!

FreeYourMind

'xtiles' que valores toma ??
Tendrias que poner el código más detallado.

lou

xtiles puede tomar valores 1,2 o 3, y en funcion de que valor tenga, pintara más o menos tiles

Digamos que si la posicion del ratón es "o", segun el valor de xtiles pintaría:
xtiles = 1
o
xtiles = 2
o x
x x
xtiles = 3
o x x
x x x
x x x

FreeYourMind

Bueno, lugo si tengo más tiempo ya lo miro mejor si alguien no te ayuda antes.
Ese pete suele dar cuando intentas poner algo que no existe, has visto bien todo lo que le pasas al map_put_pixel en el FOR, por ejemplo ?

Drumpi

Eso es porque accedes a posiciones de tablero que no existen: comprueba los valores de x e y antes de entrar en el segundo bucle, porque me da que no los pones a 0 después de pintar y se van acumulando y te sales de los rangos que hayas definido.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

lou

Quote from: Drumpi on November 21, 2009, 05:42:30 PM
Eso es porque accedes a posiciones de tablero que no existen: comprueba los valores de x e y antes de entrar en el segundo bucle, porque me da que no los pones a 0 después de pintar y se van acumulando y te sales de los rangos que hayas definido.

No, ese no es el problema ya que eso funciona OK, es decir, si comento la linea donde llamo a map_put_pixel, todo funciona perfecto. El problema surge cuando llamo a map_put_pixel :(

Windgate

Quotemap_put_pixel(0,minimapa,pos_x + x,pos_y + y,rgb(0,255,0));

Ya veo que los valores de x e y están controlados, ¿Están también controlados los valores de pos_x y pos_y?

Si te salieses del "minimapa" para pintar la cosa petaría, puede que sea eso.

Ante la duda write/write_var
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

laghengar

Puedes poner "say(map_put_pixel(0,minimapa,pos_x + x,pos_y + y,rgb(0,255,0)));?

Para ver lo que indica el debug con respecto a lo que devuelve map_put_pixel. Podría dar una pista.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Drumpi

También podría ser una mala interpretación del compilador al intentar leer esa estructura ¿has probado a poner entre paréntesis lo que hay antes del punto?
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Windgate

Cierto Lou, ¿Todavía usas las DLL del Bennupack 1.7?

Sobreescríbelas cuanto antes por las de la r110 que solucionan algún problemita de compilador con estructuras chungas.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

lou

Encontré el problema!!

No se de que modo afectaba, pero antes de llamar a map_put_pixel, tenia un drawing_alpha. Quitando el drawing alpha todo funciona correctamente.

Alguien tiene idea de porque pasa esto?

Windgate

Si estás en 32 bits cuidado, las funciones de map_put_pixel y similares no están terminadas de adaptar a 32 bits, pudiese ser eso...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es