Autor Tema: Problemas con Region + scroll + out_region  (Leído 470 veces)

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 265
  • Karma: 9
Problemas con Region + scroll + out_region
« en: Enero 09, 2018, 02:41:57 pm »
Hola chicos,

estoy experimentando un problema de lo más extraño. Es bastante simple viendolo pero un poco abstracto de explicar, voy a intentarlo:
Tengo un proceso circulo() de lo mas simple que me dice si esta dentro de la region o no, esta en un scroll y se controla el movimiento con el mouse:

Código: [Seleccionar]
process circulo()
PRIVATE
    int tamano, radio, txtid[3], indice;
    string txt[10];
END
BEGIN
    radio = 1;
    ctype=c_scroll;
    tamano = radio*2;
    region = 1;
    graph = new_map(tamano+1, tamano+1, 32);
    drawing_map(0,graph);
    drawing_color(rgba(255,255,255,175));
    draw_fcircle(radio, radio, radio);
    txtid[0] = write_string(0,200,200,0,&txt[0]);
    txtid[1] = write_string(0,200,220,0,&txt[1]);
    txtid[2] = write_string(0,200,240,0,&txt[2]);
    while(!(key(_esc)))
        x = mouse.x;
        y = mouse.y;
        if (out_region(ID, 1) == 0)
            txt[0] = "en la region";
        else
            txt[0] = "fuera de la region";
        END
        txt[1] = "x: " +x;
        txt[2] = "y: " +y;
        FRAME;
    END
OnExit:
    map_unload(0,graph);
    for(indice=0;indice<3;indice++)
        delete_text(txtid[indice]);
    END
    delete_text(txtid[0]);
END

Tengo un proceso cam() que mueve el scroll con las flechas.

Código: [Seleccionar]
PROCESS cam()
private
    int DEFAULT_MOVIMIENTO_CAMARA, fondoFPG;
end
begin
    fondoFPG = load_fpg("FPG/Fondos.fpg");
    Start_scroll( 0, fondoFPG, 3, 0, 1, 15);
    x = 250;
    y = 250;
    DEFAULT_MOVIMIENTO_CAMARA = 10;
    ctype=c_scroll;
    scroll[0].camera=id;
    while(!(key(_esc)))
        if (key (_up)) y = y - DEFAULT_MOVIMIENTO_CAMARA;END
        if (key (_down)) y = y + DEFAULT_MOVIMIENTO_CAMARA;END
        if (key (_left)) x = x - DEFAULT_MOVIMIENTO_CAMARA;END
        if (key (_right)) x = x + DEFAULT_MOVIMIENTO_CAMARA;END
        FRAME;
    END
OnExit
    stop_scroll(0);
end

Y por último un proceso main() que define una region y una resolucion inicial:
Código: [Seleccionar]
Process Main()
Begin
    scale_resolution = 19201080;
    set_mode(1024,768,32, mode_window);
    region_define ( 1 , 200 , 0, 500 , 500);
    cam();
    circulo();
    while(!(key(_ESC)))
        FRAME;
    END
END

El problema, es que circulo() a veces dice que esta fuera de la region sin estarlo, y otras veces que esta dentro siendo falso. De hecho, lo que está sucediendo es que la region comienza en x=200, asi que los graficos que estan dentro del scroll devuelven out_region true hasta que no superan esa marca, (suponiendo que la esquina superior izquierda este en el punto 0,0).

Alguien ha tenido antes este problema o se le ocurre una solucion al mismo??
Dejo el codigo, lo unico que tenéis que hacer es poner un fpg valido y un id de grafico valido para que inicialice el scroll

Código: [Seleccionar]
import "mod_key"
import "mod_video"
import "mod_text"
import "mod_map"
import "mod_mouse"
import "mod_draw"
import "mod_screen"
import "mod_scroll"


process circulo()
PRIVATE
    int tamano, radio, txtid[3], indice;
    string txt[10];
END
BEGIN
    radio = 1;
    ctype=c_scroll;
    tamano = radio*2;
    region = 1;
    graph = new_map(tamano+1, tamano+1, 32);
    drawing_map(0,graph);
    drawing_color(rgba(255,255,255,175));
    draw_fcircle(radio, radio, radio);
    txtid[0] = write_string(0,200,200,0,&txt[0]);
    txtid[1] = write_string(0,200,220,0,&txt[1]);
    txtid[2] = write_string(0,200,240,0,&txt[2]);
    while(!(key(_esc)))
        x = mouse.x;
        y = mouse.y;
        if (out_region(ID, 1) == 0)
            txt[0] = "en la region";
        else
            txt[0] = "fuera de la region";
        END
        txt[1] = "x: " +x;
        txt[2] = "y: " +y;
        FRAME;
    END
OnExit:
    map_unload(0,graph);
    for(indice=0;indice<3;indice++)
        delete_text(txtid[indice]);
    END
    delete_text(txtid[0]);
END


PROCESS cam()
private
    int DEFAULT_MOVIMIENTO_CAMARA, fondoFPG;
end
begin
    fondoFPG = load_fpg("FPG/Fondos.fpg");
    Start_scroll( 0, fondoFPG, 3, 0, 1, 15);
    x = 250;
    y = 250;
    DEFAULT_MOVIMIENTO_CAMARA = 10;
    ctype=c_scroll;
    scroll[0].camera=id;
    while(!(key(_esc)))
        if (key (_up)) y = y - DEFAULT_MOVIMIENTO_CAMARA;END
        if (key (_down)) y = y + DEFAULT_MOVIMIENTO_CAMARA;END
        if (key (_left)) x = x - DEFAULT_MOVIMIENTO_CAMARA;END
        if (key (_right)) x = x + DEFAULT_MOVIMIENTO_CAMARA;END
        FRAME;
    END
OnExit
    stop_scroll(0);
end


Process Main()
Begin
    scale_resolution = 19201080;
    set_mode(1024,768,32, mode_window);
    region_define ( 1 , 200 , 0, 500 , 500);
    cam();
    circulo();
    while(!(key(_ESC)))
        FRAME;
    END
END

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12746
  • Karma: 375
Re:Problemas con Region + scroll + out_region
« Respuesta #1 en: Enero 11, 2018, 09:27:20 pm »
podrias hacerlo mas facil y colgar un proyecto compilable?

pero no se si intentas usar region con respecto a la pantalla o al scroll? cuando esta en un scroll creo recordar que es con respecto al mismo... pero no me acuerdo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 265
  • Karma: 9
Re:Problemas con Region + scroll + out_region
« Respuesta #2 en: Enero 11, 2018, 11:59:53 pm »
podrias hacerlo mas facil y colgar un proyecto compilable?

pero no se si intentas usar region con respecto a la pantalla o al scroll? cuando esta en un scroll creo recordar que es con respecto al mismo... pero no me acuerdo...

Hola Splinter, está el código del proyecto compilable en el último bloque, solo necesita un FPG con una imagen valida para inicializar el scroll, pero cualquier imagen sirve.

Un saludo!

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12746
  • Karma: 375
Re:Problemas con Region + scroll + out_region
« Respuesta #3 en: Enero 12, 2018, 03:15:03 am »
ok, luego con tiempo armo algo y le echo un ojo, es que ahora ando con poco tiempo, mas facil era un zip con todo lo necesario (sin binarios bennugd)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6269
  • Karma: 159
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re:Problemas con Region + scroll + out_region
« Respuesta #4 en: Enero 13, 2018, 01:37:58 pm »
No me hagais mucho caso, pero hubo un tiempo en que un proceso, aun dentro de un scroll, usaba los valores de pantalla para el cálculo de OUT_REGION, y había que hacer el cálculo manualmente. No sé si me he explicado.
Por ejemplo: si un proceso lo ponemos como target del scroll para que el scroll lo siga siempre, si la pantalla es de 640x480 y el gráfico mide 10x10, cuando la X del proceso llegaba a 650, empezaba a mandar Out_region == true, pese a estar en el centro de la pantalla.

Lo que ya no me acuerdo es de si eso llegó a cambiarse o no.
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)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12746
  • Karma: 375
Re:Problemas con Region + scroll + out_region
« Respuesta #5 en: Enero 13, 2018, 10:05:49 pm »
para mi es como dice drumpi
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 265
  • Karma: 9
Re:Problemas con Region + scroll + out_region
« Respuesta #6 en: Enero 15, 2018, 11:35:27 am »
Pues creo que está relacionado con lo que dice Drumpi.  :'(

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12746
  • Karma: 375
Re:Problemas con Region + scroll + out_region
« Respuesta #7 en: Enero 15, 2018, 12:42:45 pm »
aun no logro tiempo para hacerme de un fpg, tocar el codigo y demas... cuando pueda lo hago... quizas son 2 minutos, pero si no lo son pierdo mucho tiempo... por eso decia colgar un zip con todos los fuentes y graficos listos para compilar y probar.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12746
  • Karma: 375
Re:Problemas con Region + scroll + out_region
« Respuesta #8 en: Enero 15, 2018, 12:47:00 pm »
puf, lo intente, pero vaya a saber donde tengo un fpg con fondos, y que sean de las dimensiones que tu pruebas para no tener diferencias en el test.

por favor, cuelga algo completo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 265
  • Karma: 9
Re:Problemas con Region + scroll + out_region
« Respuesta #9 en: Enero 19, 2018, 10:21:24 am »
Hola SplinterGU, aquí tienes el ejemplo completo, gracias por la ayuda.

Un saludo!

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12746
  • Karma: 375
Re:Problemas con Region + scroll + out_region
« Respuesta #10 en: Enero 19, 2018, 01:52:30 pm »
gracias!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12746
  • Karma: 375
Re:Problemas con Region + scroll + out_region
« Respuesta #11 en: Enero 19, 2018, 08:50:39 pm »
el fpg esta mal, no corresponde el nombre ni muestra el grafico renombrandolo...

como sea, yo lo veo bien, tu defines una region de 200,0 con un tamaño de 500 x 500, o sea, desde 200,0 a 700, 500...

con lo que esta bien, a mi me da valores correctos

por otro lado, te falta cnumber en los procesos, aunque al ser scroll 0, no afecta
Download Lastest BennuGD Release: http://www.bennugd.org/node/2