Miraré ese bug de exportar un mapa de 0 pixeles.. no se de que pueda ser pero no es nada serio, gracias por el report.
Gino, lo que hago para exportar el Sprite es hacer un MAP_BLOCK_COPY, utilizo el algoritmo de segimiento de contorno, con 4 variables, x0,x1,y0,y1,ancho=x1-x0,alto=y1-y0.
Si hay zonas transparentes dentro de la zona recortada no hay problema.
Hay metodos mejores ya lo se, pero este es de fácil implementación, digamos que traza un rectangulo en base a todas las posiciones por las que ha pasado la tortuga de pappert, la x menor, la y manor, la x mayor y la y mayor, y el ancho y alto pues la resta de estas.
Simu, sin problema tio, adapta el programa a tus necesidades, el bloque del mouse a 800x600 está en el proceso MOUSE_() que forma parte del GUI.
Tambien seguramente al modificar la resolución te ha pasado esto:
Hechale un ojo al proceso, te peta casi seguro por esto:
PROCESS SUB_VENTANA_SPRITE_CUT_PAPPERT_TURTLE(X,Y,ID__);
PRIVATE
INT X_INICIAL=0;
INT Y_INICIAL=0;
INT SEGURIDAD=0;
int new_screen;
INT NEW_G;
INT NEW_GOUT;
INT TEST;
BEGIN
RECORTANDO_=TRUE;
X0=X;
Y0=Y;
X1=X;
Y1=Y;
GRAPH=NEW_MAP(5,5,2,2,239048562348);
CLEAR_SCREEN();
ALPHA=0;
ID__.ALPHA=0; // PONGO TRANSPARENTE EL CURSOR..
FRAME;
NEW_SCREEN=NEW_MAP(800,600); //PREPARO UN MAPA PARA INSERTARLE LA CAPTURA DE PANTALLA
SCREEN_COPY(0,0,NEW_SCREEN,0,0,800,600); // METO LA CAPTURA DE PANTALLA EN EL MAPA QUE HE CREADO ANTERIORMENTE PARA ELLO.
put_screen(0,new_screen);
SYSTEM_MESSAGE="[INIT TRACKING] && [SAVE FILE]";
ALPHA=255;
loop
if(ground_get_pixel(x,y)<>0)y--;else break;end // busco la parte SUPERIOR del grafico para empezar a trazar el contorno.
frame(0);
end
y+=1; // ME METO EN LA IMAGEN A FALTA DE 1 PIXEL PARA SALIRME DE NUEVO.
X_INICIAL=X; // GUARDO LAS COORDENADAS DEL INICIO DEL SEGIMIENTO DE CONTORNO
Y_INICIAL=Y;
loop
SEGURIDAD++; // ESTA VARIABLE SIRVE PARA QUE SI COINCIDEN X Y X_INICIAL && Y E Y_INICIAL EN LOS 5 MOVIMIENTOS PRIMEROS SEA IGNORADO EL BREAK (BUG IMAGEN EXPORT DE 1 PIXEL).
if(ground_get_pixel(x,y)<>0)angle+=90000;advance(1);end // Tortuga de Papert Metodo EXCELENTE.
if(ground_get_pixel(x,y)==0)angle-=90000;advance(1);end // Tortuga de Papert Metodo EXCELENTE.
IF(X<X0)X0=X;END
IF(X>X1)X1=X;END
IF(Y<Y0)Y0=Y;END
IF(Y>Y1)Y1=Y;END
IF(X==X_INICIAL && Y==Y_INICIAL && SEGURIDAD>5)BREAK;END // CUANDO VUELVO AL PUNTO DE ORIGEN SE TERMINA EL CONTORNO
IF(KEY(_ESC))BREAK;END
frame(10);
end
CONTADOR_GRAFICOS_EXPORTADOS++;
NEW_G=NEW_MAP(800, 600);
NEW_GOUT=NEW_MAP(G_EXPORT_ANCHO,G_EXPORT_ALTO);
test=Ground_COPY(0,0, NEW_G, 0, 0, 800,600);
map_block_copy(0,NEW_GOUT,0,0, 0,NEW_G,X0,Y0,G_EXPORT_ANCHO,G_EXPORT_ALTO);
SAVE_MAP(0,NEW_GOUT,DIRECTORIO_INICIAL_+"/WORKDIR/"+ITOA(CONTADOR_GRAFICOS_EXPORTADOS)+".MAP");
CLEAR_SCREEN();
SYSTEM_MESSAGE="[FILE EXPORT] WORKDIR/"+ITOA(CONTADOR_GRAFICOS_EXPORTADOS)+".MAP";
ID__.ALPHA=255; // PONGO NORMAL EL CURSOR..
RECORTANDO_=FALSE;
FRAME;
END
Claro que te da error al exportar, porque lo primero que hace es una captura de pantalla a 800x600 y la pone de fondo con un put_screen(), y luego hace el tracking de pixeles, el tema es que hay que si modificas la resolución hayq ue adaptar este proceso, es muy poquito lo que hay que tocar, basta con quitar los 800x600 por ancho y alto actual de pantalla.