mm, cuando usas durezas necesitas asegurarte que siempre se van a poder detectar. si las durezas son de un pixel, y usas un gr[afico de durezas 5 veces más pequeño que el scroll, entonces tienes que revisar cada 5 pixels de movimiento de scroll en tu mapa de durezas.
esto ya no debe darte problemas
[code language="bennu"]for (rd=radio-v;rd<radio;rd++)
for (ang=0;ang<360000; ang+=30000)
if (map_get_pixel ( fpg_fondo , 7 , x+get_distx(ang,rd) , y+get_disty(ang,rd) ) == obstaculo )
x-=get_distx(ang,radio-rd); y-=get_disty(ang,radio-rd);
END
end
end
[/code]
el protagonista te quedaría así:
[code language="bennu"]PROCESS protagonista()
PRIVATE
int latencia=2;
midolor;
id_texto_mivida;
freno=0;
rato;
radio=80;
rd;
ang;
PUBLIC
vidaprota=1000;
BEGIN
ctype = C_scroll;
file = fpg_fondo;
graph = 1;
size = 100;
x=400;
y = 400;
Z = -1;
LOOP
latencia--;
IF ( key ( _up ) )
v = v + 0.1;
IF ( v > 8 );
v = 8;
END
freno=1;
ELSEIF ( key ( _down ) and freno==1 )
v = v - 0.2;
IF ( v < 0 );
v = 0;
freno=0;
rato=0;
END
ELSEIF ( key ( _down ) and freno==0 and rato > 10 )
v = v - 0.1;
IF ( v < -6 );
v = -6;
END
ELSE
freno=0;
IF ( v < 0 );
v=v+0.1;
END
IF ( v > 0 );
v=v-0.1;
freno=1;
END
END
rato++;
advance(v);
IF ( key ( _left ) )
angle = angle + 3000;
ELSEIF ( key ( _right ) )
angle = angle - 3000;
END
//WHILE ( map_get_pixel ( fpg_fondo , 7 , x+radio , y ) == obstaculo ) x--; END
//WHILE ( map_get_pixel ( fpg_fondo , 7 , x-radio , y ) == obstaculo ) x++; END
//WHILE ( map_get_pixel ( fpg_fondo , 7 , x , y+radio ) == obstaculo ) y++; END
//WHILE ( map_get_pixel ( fpg_fondo , 7 , x , y-radio ) == obstaculo ) y--; END
//ponemos los limites para que el protagonista no salga de la pantalla
IF ( x > scroll
x = scroll[0].x0 + C_RESOLUCIONX-10;
END
IF (x < scroll[0].x0 + 10 )
x = scroll[0].x0 + 10;
END
IF ( y > scroll
y = scroll[0].y0 + C_RESOLUCIONY-10;
END
IF (y < scroll[0].y0 + 10 )
y = scroll[0].y0 + 10;
END
IF ( rand ( 1 , 50 ) == 1 )
enemigo();
END
IF ( midolor = collision ( type disparomalo ) )
vidaprota = vidaprota - 1;
signal ( midolor , S_KILL );
END
id_texto_mivida = write ( 0 , x-scroll[0].x0 , ( y - scroll[0].y0 ) + 40 , 4 , "vida:" + vidaprota );
for (rd=radio-v;rd<radio;rd++)
for (ang=0;ang<360000; ang+=30000)
if (map_get_pixel ( fpg_fondo , 7 , x+get_distx(ang,rd) , y+get_disty(ang,rd) ) == obstaculo )
x-=get_distx(ang,radio-rd); y-=get_disty(ang,radio-rd);
END
end
end
FRAME;
delete_text ( id_texto_mivida );
END
END
[/code]
solo que debes encoger el radio, que la verdad lo he probado acá (no se cuánto tienes de radio), pero no pasaba entre los arbustos. saludos