Al final he decidido por usar mapa de durezas para las paredes y asi poder programar las colisiones, rebotes y inercias de la bola contra las paredes solidas.
pues uso 16 colores para cada Angulo de pared, si 16 Colores = 16 Angulos de pared solidos.
ver imagen:
- Hidden content:
Show
-
Cada color es para indicar un Angulo en conctreto de esa pared contra colisiona la bola.
Pared de 0/180 grados (sirven para pared Hotrizontal de 0 o 180 gradios)
Calculando el Angulo de la pared + el Angulo de trayectoria de la Bola
Da como resultado un Rebote en la direcion correcta como se muestra en este dibujo:
seguidamente de estos ejemplos:
He estado haciendo un test concretamente para calcular esos Angulos... de entrada y de salida, contra la pared de X angulo.
un test:
Program test_ANGLESI;
GLOBAL
string TX1,TX3,TX4;
FLOAT XSP,YSP,XSPP,YSPP,XSPS,YSPS,ANGLEI,ANGLEIB,ANGLES;
Begin
set_mode(320,200,8,0,2,0);
x=160;y=100;
WRITE(0,0,0,0,TX1);
WRITE(0,0,10,0,TX3);
WRITE(0,0,20,0,TX4);ANGLEI=90000;
LOOP
IF(KEY(_i));ANGLE+=1000;END
IF(KEY(_u));ANGLE-=1000;END
XSPP= COS(ANGLE)*75; //con Angulo + Distancia se puede saber la cordenada X
YSPP=-(SIN(ANGLE)*75);//con Angulo + Distancia se puede saber la cordenada Y
IF(KEY(_t));ANGLEI+=1000;END
IF(KEY(_y));ANGLEI-=1000;END
XSP= COS(ANGLEI)*75; //con Angulo + Distancia se puede saber la cordenada X
YSP=-(SIN(ANGLEI)*75);//con Angulo + Distancia se puede saber la cordenada Y
ANGLES=(ANGLE*2)-ANGLEI+PI;
XSPS= COS(ANGLES)*75; //con Angulo + Distancia se puede saber la cordenada X
YSPS=-(SIN(ANGLES)*75);//con Angulo + Distancia se puede saber la cordenada Y
CLEAR_SCREEN();
PUT_LINE(x,y,x+XSP,y+YSP,22);//pintamos
PUT_LINE(x,y,x+XSPS,y+YSPS,39);//pintamos
PUT_LINE(x,y,x+XSPP,y+YSPP,55);//pintamos
PUT_LINE(x,y,x-XSPP,y-YSPP,77);//pintamos
TX1="ANGLE:"+ITOA(ANGLE)+" I:"+ITOA(ANGLEI)+" S:"+ITOA(ANGLES);
TX3="I.XY:"+FTOA(XSP)+","+FTOA(YSP);
TX4="S.XY:"+FTOA(XSPS)+","+FTOA(YSPS);
Frame;
END
End
mas este otro test:
Program test_ATSAN;
GLOBAL
string TX1,TX2;
FLOAT XSP,YSP,XSPr,YSPr,FANGLE,VEL;
Begin
set_mode(320,200,8,0,1,0);
SET_FPS(60,0);
x=160;y=100;
WRITE(0,0,0,0,TX1);
WRITE(0,0,10,0,TX2);
LOOP
XSP=MOUSE.X-X;
YSP=MOUSE.Y-Y;
VEL=sqrt(XSP*XSP + YSP*YSP);//averiguamos la distancia de esas cordenadas
FANGLE=atan2(XSP,YSP)-90000;//averiguamos el angulo
XSPr= COS(FANGLE)*VEL; //con Angulo + Distancia se puede saber la cordenada X
YSPr=-(SIN(FANGLE)*VEL);//con Angulo + Distancia se puede saber la cordenada Y
CLEAR_SCREEN();
PUT_LINE(x,y,x+XSPr,y+YSPr,22);//pintamos
TX1="CORD.XY:"+FTOA(XSP)+","+FTOA(YSP)+" ANGLE:"+FTOA(FANGLE);
TX2="PRIN.XY:"+FTOA(XSPr)+","+FTOA(YSPr)+" VELOCIDAD:"+FTOA(VEL);
Frame;
END
End
Todo esto para crear ,probar e intentar resolver ese famoso rebote e inercia de la bola...
Os dejo con el Test Nº3:
PYP - Test3.rares una mezcla de los 2 primeros: grafico bonitos + test sencillo de rebote/colision
mas abajo dejo 3 capturas...
La novedad de este test, es que NO uso Collision/Overlap, solo MAP_GET_PIXEL y nada mas.
y tiene 7 Test(con la Pared con Angulos diferentes, 8 angulos diferentes)
Controles: Enter para lanzar la bola, Espacio para Pasar Siguiente Test(0-7)
J = Hace un salto de una velocidad de Y=-5 hacia arriba
M = Hace un Super Salto hacia abajo, con una velocidad de Y=
20 Hacia abajo (Rebotando fuerte en la pared)
N = Hace un Hiper Salto hacia abajo, con una velocidad de Y=
40 Hacia abajo (Rebotando muy fuerte en la pared)
Actualmente debo controlar los rebotes en disferentes angulos de la Pared y Bola:
erkosone wrote:Madre mia.. vas a tirar 1 semana o 2 semanas hasta que esto te funcione.. para que luego ni sea realista, y lo mas grave será cuando quieras cambiar algún parámetro y se desajuste todo, te habla la voz de la experiencia.. mas vale querer abarcar poco y seguro que no mucho y a parches.
no hay prisa, ademas que me gusta probar de todo aun que sea una locura, de momento voy avanzando muy poco a poco.
ya que en el juego antiguamente ha sido el principal problema de la fisica del juego.
Y esta vez voy directo al problema y superar las dificultades mas dificiles.
y de momento no quiero controlar TODO el juego solo con un Processo MAIN/JEFE se que es mas rapido en performance...
Lo malo de usar Mapa de durezas es que consume memoria RAM, contra mas grande sea el tablero del pinball, mas memoria ram consume. es lo que hay u_u
You do not have the required permissions to view the files attached to this post.