Program pruebas;
Begin
set_mode(640,480,16);
graph=new_map(30,10,16);
map_clear(0,graph,rgb(0,255,0));
write_int(0,0,0,0,&angle);
x=220;
y=220;
angle=135000;
size=400;
detectores();
obstaculo();
While (not key(_esc))
If (key(_right))
angle-=5000;
End
If (key(_left))
angle+=5000;
End
If (key(_down))
advance(-5);
End
If (key(_up))
advance(4);
End
//*******************************************************************
// ESTE ADVANCE(1) NO FUNCIONA SI ANGLE NO VALE 0, 90, 180, 270 o 360
advance(1);
//*******************************************************************
Frame;
End
End
Process detectores()
Private
int colision;
Begin
graph=new_map(220,80,16);
set_center(0,graph,110,40);
drawing_map(0,graph);
drawing_color(rgb(255,0,0));
draw_box(40,0,180,5);
draw_box(180,0,220,20);
write_int(0,0,10,0,&flags);
While (not key(_esc))
x=father.x;
y=father.y;
If (flags == 0)
angle=father.angle;
colision=collision(Type obstaculo);
If (colision <> 0)
flags=2;
End
Else
angle=-father.angle;
colision=collision(Type obstaculo);
If (colision <> 0)
flags=0;
End
End
Frame;
End
End
Process obstaculo()
Begin
graph=new_map(80,80,16);
map_clear(0,graph,rgb(0,0,255));
x=100;
y=100;
While (not key(_esc))
Frame;
End
End
1. El advance o xadvance no funciona si el angle no vale: 0, 90, 180, 270 o 360. Esto me suena de que se hablo ya, y creo recordar que se soluciono.
2. Ejecutando ese codigo: El rectangulo verde que manejas tu con las "fechas" tiene dos sensores rojos uno a la izquierda y el otro a la derecha que es un unico proceso, con flags "0" y "2" se va colocando a cada lado. Por ultimo hay un cuadrado azul haciendo de obstaculo.
PROBLEMA: Si tocamos el cuadrado azul SOLO con un flags (el "0" o el "2") cambia al otro flags, pero si tocamos con ambos flags al cuadrado azul el angle no es correcto en su colacion. Puede ser este problema venga del bugfix de los Mirrors???
Por supuesto no funciona... erroneamente yo cambie que si el advance daba 0, debia avanzar 1... pero eso esta mal, al advance dar un valor menor a 1 y mayor a 0, y por ser valores enteros, no avanza... lo que hay que usar en estos casos de incrementos tan reducidos es usar resolution...
No entiendo tu 2do planteo, pero supongo que te referiras a lo que corrijo en el siguiente codigo
Program pruebas;
import "mod_video";
import "mod_text";
import "mod_key";
import "mod_map";
import "mod_grproc";
import "mod_draw";
Begin
set_mode(640,480,16);
graph=new_map(30,10,16);
map_clear(0,graph,rgb(0,255,0));
write_int(0,0,0,0,&angle);
x=220;
y=220;
angle=135000;
size=400;
detectores();
obstaculo();
resolution = 10; // Splinter
While (not key(_esc))
If (key(_right))
angle-=5000;
End
If (key(_left))
angle+=5000;
End
If (key(_down))
advance(-50);
End
If (key(_up))
advance(40);
End
//*******************************************************************
// ESTE ADVANCE(1) NO FUNCIONA SI ANGLE NO VALE 0, 90, 180, 270 o 360
advance(10); // Splinter
//*******************************************************************
Frame;
End
End
Process detectores()
Private
int colision;
Begin
graph=new_map(220,80,16);
set_center(0,graph,110,40);
drawing_map(0,graph);
drawing_color(rgb(255,0,0));
draw_box(40,0,180,5);
draw_box(180,0,220,20);
write_int(0,0,10,0,&flags);
priority = father.priority - 1; // Splinter
resolution = 10; // Splinter
While (not key(_esc))
x=father.x;
y=father.y;
If (flags == 0)
angle=father.angle;
colision=collision(Type obstaculo);
If (colision <> 0)
flags=2;
angle=-father.angle; // Splinter
End
Else
angle=-father.angle;
colision=collision(Type obstaculo);
If (colision <> 0)
flags=0;
angle=father.angle; // Splinter
End
End
Frame;
End
End
Process obstaculo()
Begin
graph=new_map(80,80,16);
map_clear(0,graph,rgb(0,0,255));
x=100;
y=100;
priority = father.priority + 1; // Splinter
While (not key(_esc))
Frame;
End
End
Por favor, confirmame si esto resuelve tu problema.
1. Efectivamente con ese codigo funciona bien todo, gracias por las aclaraciones, error mio de novato.
2. Mira que le di vueltas al tema (se que viene el problema por el ultimo bugfix de los Mirrors) y por eso postee.
En esta parte del codigo:
If (flags == 0)
angle=father.angle;
colision=collision(Type obstaculo);
If (colision <> 0)
flags=2;
No me fije en que si se cumplia "collision" hacia un cambio flags seguido un frame, pero no cambiaba el angle antes del frame (grave error). De hecho el problema era apreciable (con lupa y camara lenta) al cambiar de un flag a otro.
hay que decir que lo del mirror mas que un bugfix (que en verdad lo es) es un cambio de comportamiento a como funcionaba fenix (y que no era correcto)
me alegro de haber sido de ayuda... y espero que te guste el nuevo comportamiento de los mirrors... se pueden hacer unos efectos muy interesantes...