(Solucionado)Problemas con NEW_MAP

Started by proteo, March 17, 2014, 03:19:52 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

proteo

Buenas, como va? necesito ayuda, tengo problemas con new_map, mi codigo es el siguiente


mapa = new_map(50,300, 32);
map_xputnp(0, mapa, graficos, 11, 25, 320, 0, 100, 100, 100);
                        graph = mapa;



Con este código no me muestra nada en pantalla. Ahora, si luego le hago un MAP_CLEAR(0,mapa,rgb(255,0,0)) o MAP_CLEAR(0,mapa,rgb(255,255,255)) o cualquier combinación el gráfico que estoy dibujando en el mapa aparece pero obviamente con los colores cambiados, ejemplo, si hago MAP_CLEAR(0, mapa, rbg(255,0,0)) aparece la imagen en diferentes tonos de rojo y si hago MAP_CLEAR(255,255,255) se ve todo blanquecino incluso el fondo que debería ser transparente. No se si esto se debe a la composición de la imagen que estoy dibujando, aunque seria raro, ya que si la asigno directamente al graph del proceso se ve sin problemas. Tambien probé hacer MAP_CLEAR(0,mapa,0) y sigo sin ver nada.

Alquna idea de que puede estar pasando?

Adjunto dos imagenes, una es el grafico que estoy dibujando dentro del mapa temporal y la otra es como sale en pantalla.

Muchas gracias.
Saludos.

FreeYourMind

de poco sirve si no pones todo el codigo, se pueden interpretar muchas cosas sin ver todo el codigo por su orden

proteo

#2
Quote from: FreeYourMind on March 17, 2014, 10:51:16 PM
de poco sirve si no pones todo el codigo, se pueden interpretar muchas cosas sin ver todo el codigo por su orden

Si, sorry, tenes razon, aca paso el codigo completo


program pruebamap;

import "mod_map";
import "mod_video";
import "mod_screen";
import "mod_draw";

process Main()
private

end

begin

set_mode(640, 480,32);
map_clear(0,0,rgb(0,255,0));
grafico();

end


process grafico()

private

int origen;
int mapa;
end

begin

origen = load_png("sp_rayo2a_2.png");

mapa = new_map(50, 100, 32);
//map_clear(0, mapa, rgb(255,255,255));
set_center(0,origen,0,0);
map_xputnp(0, mapa, 0, origen, 0, 0, 0, 100, 100, 100);

GRAPH = mapa;

x = 320;
y = 240;

loop

frame;

end

end



y adjunto la imagen que estoy utilizando.

Limpio la pantalla con un color verde para que se aprecie que sin el MAP_CLEAR() y a pesar de haber dibujado el grafico en el mapa creado con NEW_MAP() no aparece en pantalla.

Desde ya muchas gracias.

Saludos.

FreeYourMind

estas poniendo 2 mapas, quita la linea GRAPH = mapa;
luego te lo miro con tiempo, pero asi ultra rapido, parece que estas tapando un mapa con otro

proteo

Quote from: FreeYourMind on March 18, 2014, 06:46:52 AM
estas poniendo 2 mapas, quita la linea GRAPH = mapa;
luego te lo miro con tiempo, pero asi ultra rapido, parece que estas tapando un mapa con otro

Gracias por tu respuesta, esta bien el GRAPH = mapa; es el mapa que acabo de crear y que quiero que el proceso muestre. A que segundo mapa te referis? Si tenes un tiempito proba el codigo asi como esta (bajando el adjunto) y luego probalo descomentando el MAP_CLEAR.

Muchas gracias.
Saludos.

proteo

Ya lo pude solucionar


program pruebamap;

import "mod_map";
import "mod_video";

process Main()

        private

              int mapa;
              int grafigo;

        end

        begin

              set_mode(640, 480, 32);
              mapa = new_map(50,100,32);
              grafico = load_png("sprite.png");
              map_block_copy(0,mapa,0,0,grafico,0,0,50,100);

              graph = grafico;
              x= 320;
              y = 240;

              loop

                   frame;

              end

        end


La duda que me queda para que esto quede de 10 es como hacer para obtener el graphID de un grafico que tengo almacenado en un .fpg en lugar de tener que cargar el grafico con load_png() para obtener este dato? Esto porque MAP_BLOCK_COPY() solo permite utilizar como origen y destino, graficos que esten en el mismo FILE, en este caso 0.

Muchas gracias.
Saludos.

FreeYourMind

lo que necesitas es mirar los ejemplos del manual, si preguntas como se obtiene el grafico del FPG es porque no estas leyendo los manuales o ejemplos xDDD

proteo

Quote from: FreeYourMind on March 18, 2014, 07:58:25 PM
lo que necesitas es mirar los ejemplos del manual, si preguntas como se obtiene el grafico del FPG es porque no estas leyendo los manuales o ejemplos xDDD

Me estoy manejando con el manual de Osk, load_png devuelve un GrpahID pero no encuentro una funcion que me devuelva el GraphId en memoria a partir de un grafico que esta guardado en un .fpg. MAP_BLOCK_COPY() requiere que tanto el grafico de origen y el de destino esten en el mismo FILE, en este caso en memoria (FILE 0) osea que yo necesito subir a memoria uno de los graficos del .fpg para poder utilizarco en MAP_BLOCK_COPY() junto al mapa que acabo de crear. El GraphId de un grafico dentro de un .fpg entiendo que es el nro. con el que se guardo, pero yo necesito trasladar ese grafico a un GraphID en memoria (alojado en el FILE 0). La unica funcion que encontre para trasladar un grafico de un FILE a otro es MAP_XPUTNP() pero lo hace con el problema con el que inicie este tema.

Voy a releer la seccion dedicada a estos temas en el Manual de Osk. Quiza pase algo por alto.

Muchas gracias por tu tiempo.

FreeYourMind

pero si sólo tienes que hacer esto dentro de un proceso:


file=mi_fichero_fpg;
graph=3;


esto asigna el grafico 3 del fpg al grafico del proceso, no entiendo como te complicas tanto xD estoy seguro que en casi todos los ejemplos tienes un grafico asignado dentro de un proceso....

FreeYourMind

en loas parametros del map_block_copy:

map_block_copy(file, graph, 0, 0, ..........


los dos primeros son el fpg y el id del grafico, no veo donde puedes tener dudas :)

proteo

Quote from: FreeYourMind on March 18, 2014, 09:46:07 PM
pero si sólo tienes que hacer esto dentro de un proceso:


file=mi_fichero_fpg;
graph=3;


esto asigna el grafico 3 del fpg al grafico del proceso, no entiendo como te complicas tanto xD estoy seguro que en casi todos los ejemplos tienes un grafico asignado dentro de un proceso....


Ahhhhora, si, no sabia que simplemente asi se podia hacer esto, pense que por ejemplo, load_png() devolvia un puntero a memoria donde se alojaba el grafico y que internamente los procesos hacian algo parecido indicandole en FILE el fileID y en GRAPH el nro de grafico. Como pensaba que era asi el funcionamiento estaba buscando una forma de obtener ese puntero.


program prueba;

import "mod_video";
import "mod_map";

global

int graficos;

end

process Main()

begin
set_mode(640,480,32);

graficos = load_fpg("graficos.fpg");
recortar();

end

process recortar()

private
int mapa;
end

begin

FILE = graficos;
GRAPH = 1;

mapa = new_map(50,50,32);
map_block_copy(0,mapa,0,0,graph,0,0,50,100,0);
graph = mapa;

x = 320;
y = 240;

loop

frame;

end

end


En fin, nada, muchas gracias por tu ayuda.