Geca:
Cuala version te gusto mas?
-La que se ve con esa flecha roja(utiliza angulos y xadvance)
-o La que no se ve esa flecha(calcula solo X,Y sin usar angulos)
Yo ahora me echo un tablero totalmente cuadrado, para hacer pruebas rapidas.

De momento estoy probando de programar en X Y sin usar Angulos y Advance...
Esta vez parece que se desliza la bola en el suelo, y rebota en el suelo de forma casi real...
La pared parece que funciona... pero de momento no me confio...
El techo no lo se....
Hola Cictec
Modifique el archivo de gemix.cnf, y lo deje de serie este parametro: free_sintax=0
Y descubri que solo hay un error de compilacion por que dice que me deje (;) el punto y coma
En un BO++ ,en la linea 291 del editor.rpg
Solo me a dado ese error.
Y...
Realmente recomiendas que situe en la cabezera del progarama PYP.prg el compiler_options _extended_conditions;??
:/
Tendria que ponerlo en todos mis proyectos y revisar mi codigo de free_sintax....
Me gustaria saber esas limitaciones que tiene free_sintax.
Yo e leido que puedes omitir poner los ; al final de los comandos
y los parentesis en los IF(condicion) son opcionales...
-----------------------------------------------------------------------------------------------------------------------------
Me gustaria explicar mi teoria de fisicas algoritmicas de mi bola:
Lo hago de forma ordenada hasta el frame final.1-Crea la bola,con grafico y cordenadas,donde esta el primer oyo(aun no hay lanzadera) Loop
2-guardamos las cordenadas antiguas X,Yx3=x;//guarda la antigua posicion
y3=y;
3-comprueba si Y_G(fuerza vertical) esta a menos de < 35, Incrementa la fuerza vertical, hasta llegar al maximo de 35 if(y_g<35);y_g++;end
if(y_g>35);y_g--;end
4-Actualiza las nuevas cordenadas X,Y aplicando las fuerzas G: Y_G y X_GX+=X_G;
Y+=Y_G;
5-calculando la distancia de desplazamiento entre las cordenadas antiguas(x3,y3) y las actuales X,Y.if(fget_dist(x3,y3,x,y)>0);//calcula la distancia del destino
x2=x;//guarda la nueva cordenada
y2=y;//guarda la nueva cordenada
x=x3;//posiciona la antigua posicion
y=y3;//posiciona la antigua posicion
repeat;//bulce basico, para avanzar a nivel de pixel la bola, hasta colisionar con algun objeto, o cuando llege a su destino.
angle=fget_angle(x,y,x2,y2);//calcula el angulo del destino
5.1-Este processo de calculo, hace medir a nivel de pixel si a topado con algun objeto de la pantallaadvance(1);
5.2-Cada vez que avanza(Advance) 1pixel, vuelve a escanear los posibles objetos colisionados (pueden haver mas de uno a la vez! solapados)frame(0);//esto sirve para resetear el escaneo de colisiones de objetos.
repeat
if(bo=collision(type PIEZA_TABLERO));
tipo_piz=bo.tipo_piz;
5.2.1- a colisionado con un objeto de tipo: oyo o oyo lanzador, ejecutara sus comandos y saldra de este bucle if(tipo_piz==0 or tipo_piz==1);//oyo, oyo lanzador
if(get_dist(bo)<=9);
bo[3]=1;
if(id_oyo_salido<>bo);
id_oyo_salido=bo;
bo[9]=2;break;
end
end
5.2.2- a colisionado con una pared, ejecuta sus comandos y sale del bucle if(tipo_piz==2 or tipo_piz==3 OR bo.tipo_piz==5);//paredes Y FLIPERS
bo[1]=0;bo[2]=0;
if(x_g>0 and hay_pared_comp(X,Y,0));// derecha >>
5.2.2.1- comprueba que si se mueve a +X_G>> y que si hay un muro a la derecha= se invierte -X_G a negativo x_g=-x_g;bo[1]=1;sound(SONIDO_WAV[10]);
end
if(x_g<0 and hay_pared_comp(X,Y,1)and bo[1]==0);// izquierda <<
5.2.2.2- comprueba que si se mueve a -X_G<< y que si hay un muro a la izquuierda= se invierte +X_G a positivo x_g=abs(x_g);sound(SONIDO_WAV[10]);
end
if(y_g>3 and hay_pared_comp(X,Y,2));// caiendo
5.2.2.3- comprueba que si se mueve a +Y_G abajo y que si hay suelo abajo= se invierte -Y_G a negativo,para subir y_g=-y_g+2;bo[2]=1;sound(SONIDO_WAV[10]);
end
if((y_g==0 or y_g==2 or y_g==1 or y_g==3) and hay_pared_comp(X,Y,2) and bo[2]==0);// caiendo
5.2.2.4- comprueba que si esta a 0=> <=3 : Y_G, mas si hay suelo, lo pondra a 0 fuerza Y_G esta en el suelo y_g=-1;bo[2]=1;
end
if(y_g<0 and hay_pared_comp(X,Y,3)and bo[2]==0);// subiendo
5.2.2.5- comprueba que si se mueve a -Y_G subiendo y que si hay un techo arriba= se invierte +Y_G a positivo, para caer y_g=abs(y_g);sound(SONIDO_WAV[10]);
end
bo[9]=1;advance(-1);//retrocede 1 pixel, para que no se solape la bola
break;
end
5.2.3- a colisionado con bomber, ejecuta sus comandos dando puntos y sale del bucleif(tipo_piz==4);//bomber
bo[4]=1;
if(id_bomber<>bo);
... Aun no programado en modo X,Y
id_bomber=bo;
puntuacion+=50;
bo[9]=1;advance(-1);sound(SONIDO_WAV[12]);
break;
end
end
end
until(not bo);
5.3-Cuando termina de escanear, comprueba que si a llegado a su destino(cordenada final) o si bo[9] lo a activado algun objeto colisionado para salir del bucle.until(fget_dist(x,y,x2,y2)=<1 or bo[9]>0);
5.3-Mira si a dejado de colisionar con un oyo o con un bomer, para borrar el id del antiguo, y ajusta el angulo a 0.if(bo[3]==0);id_oyo_salido=0;end
if(bo[4]==0);id_bomber=0;end
angle=0;
end
6- Comprueba si se piso un oyo nuevo, para que se meta y ejecute sus comandosif(bo[9]==2 and id_oyo_salido>0);
...comandos...
end
7- Actualiza las cadenas de texto para ver las cordenadas + la fuerza G, y actualiza las cordenadas de la sombra.TEXTO_TEMP="X:"+itoa(x)+" Y:"+itoa(y);
TEXTO_TEMP2="X:"+itoa(x_g);
TEXTO_TEMP3="Y:"+itoa(y_g);
ID_SOMBRA.x=x+desp_xy_som;
ID_SOMBRA.y=y+desp_xy_som;
8- muestra el grafico en pantalla con sus cordenadas.FRAME;
9- comprueba el bucle final,si la bola se a salido del tablero, y resta una vidauntil(out_region(id,0) and (x<-16 or x>TABLERO_SAV.tamano_tablerox+16 or y<-16 or y>TABLERO_SAV.tamano_tableroy+16));
VIDAS_BOLA--;sound(SONIDO_WAV[9]);
Fin!