PDA

Ver la versión completa : Enesima duda sobre colisiones gravedades y ****** en vinagre...



jean la montard
15/02/2011, 20:23
Process main()

begin

set_mode(320,240,16);
load_fpg("graficos1.fpg");
put_screen(0,1);
prota();

loop
frame;
if key(_esc):break;end
end

let_me_alone();

end

Process prota();

private

int gravedad;
int contgravedad;
int pixeld;
int pixeld2;
int pixeld3;
int pixell;
int pixelr;
int redd,greend,blued;
int redd2,greend2,blued2;
int redd3,greend3,blued3;
int redl,greenl,bluel;
int redr,greenr,bluer;
int saltando;

begin

graph=2;
x=160;
y=120;
write_var(0,10,10,0,gravedad);
write_var(0,10,20,0,redd);
write_var(0,10,30,0,redd2);
write_var(0,10,40,0,redd3);
write_var(0,10,50,0,contgravedad);
write_var(0,10,60,0,saltando);
write_var(0,300,10,0,x);
write_var(0,300,20,0,y);

loop
if(key(_space))x=160;y=120;end
if(redd>240 && greend>240 && blued>240) x=160;y=120;end
//Gravedad
y-=gravedad;
pixeld=map_get_pixel(0,1,x,y+19);
get_rgb(pixeld,&redd,&greend,&blued);
pixeld2=map_get_pixel(0,1,x+19,y+19);
get_rgb(pixeld2,&redd2,&greend2,&blued2);
pixeld3=map_get_pixel(0,1,x-19,y+19);
get_rgb(pixeld3,&redd3,&greend3,&blued3);
if(redd<240 && redd2<240 && redd3<240) ;gravedad=-4 ; else gravedad=0;saltando=0; end
//Movimiento
pixell=map_get_pixel(0,1,x-19,y);
get_rgb(pixell,&redl,&greenl,&bluel);
pixelr=map_get_pixel(0,1,x+19,y);
get_rgb(pixelr,&redr,&greenr,&bluer);
IF (key(_right) && (redr<240||redd2<240))x=x;else x -= 4 ; END
IF (key(_left) && (redl<240||redd3<240))x=x;else x += 4 ; END
IF (key(_down)) y += 4 ; END
IF (key(_up)) gravedad=0; y -= 4 ; END
//salto
contgravedad--;
if(contgravedad<0)contgravedad=0;end
if(key(_control) && contgravedad==0 && (redd>240 || redd2>240 ||redd3>240 )) contgravedad=10;saltando=1;end
if(contgravedad<>0)y-=4;gravedad=0;end

frame;
end

end




El problema que tengo se puede ver en este video...

http://www.youtube.com/watch?v=BEXA73qWbds

El problema es que a pesar de definir 5 puntos de colision en el cubo de los huevos , sigue atravesando las plataformas si uno se pone tiquismiquis... ¿Alguna idea?

Aiken
15/02/2011, 20:31
y en lugar de tener tantos puntos de colision porque no haces una colision de sprites normal, vamos la que te mira si algun pixel de los dos sprites se solapa. la verdad es que nunca he necesitado definir un punto de colision, cuando menos 5.

Aiken

< - >
es decir defines las plataformas como sprites, y compruebas que no hay choque de sprites.

jean la montard
15/02/2011, 20:41
Lo que comentas es la ultima alternativa que tengo xD ya que al menos a mi me resulta mas sencillo dibujar el mapa entero y luego sencillamente hacer un mapa de durezas que circule por debajo...

SplinterGU
15/02/2011, 20:46
es mas que evidente que no puedes usar ese tipo de colision para lo que haces, puesto que no tienes puntos de colision en todo el cubo y logicamente va a traspasar...

jean la montard
15/02/2011, 20:55
En teoria es un cuadrado todos los puntos de cada uno de los lados llegan a la vez a colisionar con las plataformas del video... pero bueno , hare lo que decis...

SplinterGU
15/02/2011, 21:05
varios tips...

1) load_fpg devuelve un identificador... ese identificador es el file cargado.

2) nunca asumas cosas ni valores, es un grave error de programacion hacerlo, por ejemplo, no asumas que en el file 0, estara el grafico 1.

esto esta mal

load_fpg("graficos1.fpg");
put_screen(0,1);


lo correcto es

file = load_fpg("graficos1.fpg");
put_screen(file,1);


por otro lado, no es como dices, la plataforma no tiene los puntos de colision, sino el prota, por eso, solo estas comprobando en x+/-19,y+/-19, lo cual deja sin efecto, x,y o x+9 o x-9, x=8, y-3, y+5, etc.

y ese es el problema... cuando choca en medio del grafico, que en realidad no choca.

jean la montard
15/02/2011, 21:32
Lo del load_fpg... si tienes razon es un mal vicio que arrastro desde fenix,

Gracias por los consejos...

futublog
15/02/2011, 23:07
no me voy a jartarme de repasarte el codigo, pero asin por lo pronto y haciendolo mal, tambien puedes poner una plataforma mas ancha y que colisione en una z inferior al dibujo anterior, no se si me explico bien o no me entiendo

el caso es que quiero darte animos ya que ayer y hoy me he estado peleando tambien con un ''plataformas'' entrecomillado que estoy haciendo con colisiones, je je