Existe alguna forma de borrar sólo una imagen específica dibujada con el comando put()?
Sé que se puede hacer con los textos, dándole un identificador y luego con el comando delete_text([idtext]), existe ese comando para borrar imagenes dándoles un identificador? o siempre que queramos borrar una imagen debemos borrar todo y volver a poner las demás imagenes que no queremos borrar (clear_screen())?
No. Para ello no uses put(), usa un proceso, que va ser igual y podras borrarlo porque tendrá identificador
Muchas Gracias :)
Buenas, tengo problemas con las funciones de este tipo. Quiero exponerlas a ver si alguien sabe algo, ando haciendo pruebas con ellos y no se si es otra torpeza mía que no entiendo el intérprete o qué.
import "mod_map"
import "mod_screen"
import "mod_key"
import "mod_say"
import "mod_video"
import "mod_mouse"
import "mod_text"
Process Main()
Private
int map;
Begin
set_mode(640,480,32,0);
set_fps(60,0);
write_var(0,10,10,0,x);
write_var(0,10,20,0,y);
if(map = map_new(100,100,32)==0) ///Creo un mapa nuevo 100 x 100 de 32 bits.
say("Error en map new");
end
if(map_clear(0,map,rgb(255,0,0))==false) ///Ese mapa lo pinto de color rojo
say("Error en map clear");
end
if(put(0,map,160,100)==false) ///lo posiciono en 160,100
say("Error en put");
end
if(graph = map_new(10,10,32)==0) ///creo otro mapa de 10x10 de 32 bits y lo incluyo en el graph del proceso
say("Error en map new");
end
if(map_clear(0,graph,rgb(0,255,0))==false) ///a este graph lo pinto de color verde
say("Error en map clear");
end
Repeat
x=mouse.x; ///posicionar el graph a cada frame, en la posición del ratón.
y=mouse.y;
frame;
Until(key(_ESC))
End
///CREO QUE ASÍ, DEBERÍA MOSTRAR UN SPRITE DE 10X10 DE COLOR VERDE MOVIÉNDOSE SEGÚN LA POSICIÓN DEL RATÓN, SOBRE UN FONDO NEGRO QUE CONTIENE UN CUADRADO ROJO.
///SIN EMBARGO, LO QUE MUESTRA ES TODO UN FONDO HOMOGENEO DE COLOR VERDE.
Creo que así debería mostrar un sprite de 10 x 10 de color verde moviéndose según la posición del ratón, sobre un fondo negro que contiene un cuadrado rojo.
Sin embargo, lo que muestra es todo un fondo homogeneo de color verde.
Ningún "say" salta, por lo que considero que todas las funciones se hacen sin errores.
Lo que sale en el ejemplo de la wiki:
import "mod_map"
import "mod_screen"
import "mod_key"
Process Main()
Private
int map;
Begin
// Create a new graph of size 100x100 and color depth of 8bit
map = map_new(100,100,8);
// Clear the map red
map_clear(0,map,rgb(255,0,0));
// Put it in the center of the screen
put(0,map,160,100);
Repeat
frame;
Until(key(_ESC))
End
No funciona, solo sale un pantallazo negro. Sin embargo, el siguiente código si lo hace correctamente.
import "mod_map"
import "mod_screen"
import "mod_key"
import "mod_video"
Process Main()
Private
int map;
Begin
set_mode(640,480,32,0);
set_fps(60,0);
map = map_new(100,100,32);
map_clear(0,map,rgb(255,0,0));
put(0,map,160,100);
Repeat
frame;
Until(key(_ESC))
End
Puede deberse a que estás haciendo asignaciones dentro de las condiciones de los IF y el compilador se hace un lío: intenta sacar las asignaciones de los if o, al menos, ten la "cortesía" de poner paréntesis para establecer las prioridades de las operaciones.
Aparte de eso, lo único que se me ocurre, sin hacer pruebas, es un problema de compatibilidad de profundidad de color (RGB se diseñó para modos 16 bits y se convirtió para modos de 8 bits, no sé hasta qué punto funciona en 32 bits, para eso también está RGBA). Pero apuesto más por lo del orden de operaciones porque te haya hecho:
map_new(100,100,32)==0 (false)
map = false (0)
y en el map_clear del siguiente if, al hacerlo sobre el FILE=0 y GRAPH=0 te haya hecho el cambio de color al fondo de la pantalla.
Aunque es raro, la asignación debería hacerse después de la comparación, pero vete tu a saber qué ha entendido el compilador.
A partir de ahora procuraré hacerlo así, gracias :).
No es una regla, no sé si eso solucionará el fallo.
Pero como decía mi profe de cálculo: los paréntesis nunca sobran.
Ten en cuenta que, por increible que parezca, los compiladores son programas, y pueden tener (no digo que los tengan) bugs :D
(Aunque el 95% de los fallos son culpa del programador :D).
Gracias XD