Duda Novato

Started by jordancfs12, March 06, 2014, 05:46:03 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

jordancfs12

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())?

FreeYourMind

No. Para ello no uses put(), usa un proceso, que va ser igual y podras borrarlo porque tendrá identificador

jordancfs12


laghengar

#3
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
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Drumpi

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.

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)

laghengar

A partir de ahora procuraré hacerlo así, gracias :).
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Drumpi

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).
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)

laghengar

!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O