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:
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.
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:
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
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
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...
Quote from: SplinterGU on January 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...
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!
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)
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.
para mi es como dice drumpi
Pues creo que está relacionado con lo que dice Drumpi. :'(
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.
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.
Hola SplinterGU, aquí tienes el ejemplo completo, gracias por la ayuda.
Un saludo!
gracias!
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