[GAME]: PYP - ProYect Pinball [Proyecto/Pausado]

Proyectos en Desarrollo.

Re: [GAME]: PYP - ProYect Pinball [Proyecto/Pausado]

Postby erkosone » Wed Sep 05, 2012 4:02 pm

Pero lo que mas te recomiendo es que aprendas C++, por que en ese lenguaje tienes todo esto por toda internet bien explicado, una vez que sepas C++ y entiendas algún ejemplo no te costará mucho trabajo traerte el ejemplo a gemix, yo aprendí c++ y luego monkey y ahora puedo traerme cualquier código "salvando las diferencias por que monkey es oop" a gemix, y eso me hace feliz XD..

Deberías plantearte ya que con el nivel que tienes necesitas dar el siguiente paso.. no pierdas mas tiempo, decidete y para unos meses para comer algunas galletas de c++, sin eso vas a ir a ciegas toda la vida ;)
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME]: PYP - ProYect Pinball [Proyecto/Pausado]

Postby SimulatorOne » Wed Sep 05, 2012 9:15 pm

lo siento pero es que no me entero de nada, prefiero ir experimentando poco a poco, intentar simular un comportamiento bueno de la bola.

lo que si me dado cuenta mirando los PRG de este proyecto(del año 2010), que no esta NADA obtomizado, y el codigo es muy muy rebuscado y liante.
Ademas consume una burrada de memoria ram.

ademas usando Gemix.... 5.7 y 6.0 beta .... dios >_<

que tiempos XDDD
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME]: PYP - ProYect Pinball [Proyecto/Pausado]

Postby SimulatorOne » Thu Sep 06, 2012 4:25 am

Hola

quiero que prueben este primer test de Colision de la Bola contra paredes de CUALQUIER FORMA ANGULO TAMAÑO.

De momento esta en fase de pruebas, mejoras y correcion de bugs.
En este test, simplemente haremos caer 1 bola des del oyo, caerá hasta toparse con una de las 2 paredes.

Una de las paredes se puede mover usando el teclado, mover,angulo y el tamaño.

Añado en el test distintas formas de Paredes que pueden probar...

El objetivo de este test es ajustar y corregir la colision Vertical Y sobre las paredes(o objetos duros,por ejemplo un fliper)

Se que este test es pobre, pero es que lo estoy programandolo des de 0.

Y actualmente tengo preguntas acerca del ORDEN de Correcion de cordenadas XY al colisionar con las paredes:
-Que se debe ajustar primero las cordenadas X o Y???

-Las piezas de paredes pueden mover la bola? Plataformas moviles, paredes, puertas y Flipers.
Actualmente funciona a suerte de que cuando movemos la pieza, la bola se mueve junto con ella... pero de momento en vertical Y

Algunas veces este test, puede fallar las colisiones... y la bola atraviesa el objeto de manera erronea...

De todas formas de momento estoy probandolo de este metodo un tanto Brusco por COLLISION(se que es la cosa mas lenta) , gracias a esto me permite averiguar una colision con Paredes con formas.
En cambio si lo hubiera echo con OVERLAP (podeis modificarlo en el PRG) NO puede detectar las formas, pero si el Angulo,Size,shear y flags...

Puede que al final, para que me sea mas sencillo la programacion, y tenga que sacrificar las paredes con Formas, es posible que llege a usar Mapa de Durezas... creo que es mucho mas rapido a la hora de comprobar... ademas que me chiva del color RGB de las colisiones por color MAP_GET_PIXEL.

Segun el juego de Megadrive de Virtual Pinball, solo hay paredes con angulos concretos: [0],[22.5],[45],[67,5],[90] y el tamaño de las paredes es el mismo.
Recuerdo que me estoy basandome en las fisicas de este juego:
You do not have the required permissions to view the files attached to this post.
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME]: PYP - ProYect Pinball [Proyecto/Pausado]

Postby kozka » Thu Sep 06, 2012 9:02 am

Tiene muy buena pinta , te falta la fuerza de la gravedad y colision con mas bolas(si lo quieres complicar)
User avatar
kozka
 
Posts: 2111
Joined: Sun Feb 01, 2009 9:36 pm

Re: [GAME]: PYP - ProYect Pinball [Proyecto/Pausado]

Postby erkosone » Thu Sep 06, 2012 11:18 am

Tiene fallos, aveces la bola se vuelve loca y sale por debajo de la plataforma.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME]: PYP - ProYect Pinball [Proyecto/Pausado]

Postby SimulatorOne » Thu Sep 06, 2012 11:56 am

Tiene muy buena pinta: pues la verdad es que graficamente no es nada, lo importante es que pueda currarme las fisicas.

la fuerza de la gravedad ya la tiene en Y vertical.
El problema que que las colisiones no son precisas, aun que quisiera u_u
y por eso algunas veces la bola se traspasa el muro por error.

colision con mas bolas(si lo quieres complicar): mmmm... es muy complicado, ademas que antes deberia terminar con las fisicas de la bola xD

incluso he probado de usar fget_angle con floats: viewtopic.php?f=73&t=4543

pero me frustra que no sepa como usar e entender el 90% de las funciones de MATH2D.
Solo me se las mas sencillas de Div2
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME]: PYP - ProYect Pinball [Proyecto/Pausado]

Postby kozka » Thu Sep 06, 2012 12:54 pm

cuando digo lo de la fuerza de la gravedad , ahora ya cae la pelota , pero si hay pendiente no cae a eso me refiero.
User avatar
kozka
 
Posts: 2111
Joined: Sun Feb 01, 2009 9:36 pm

Re: [GAME]: PYP - ProYect Pinball [Proyecto/Pausado]

Postby SimulatorOne » Thu Sep 06, 2012 1:56 pm

Aun no hay inercias de pendientes, esa info la tiene que obtenerla de la Pared que colisiona, obteniendo un Angle de esa pared o/y direcion de velocidad XY.

Depende de la Direcion de la Bola.
Actualmente lo muevo por cordenadas XY(Float), en Angle no uso de momento...

Es decir, que hay 2 velocidades: XSP (horizontal), YSP (Vertical)

Si la bola va a: XSP=0 YSP=10; quiere decir que va Hacia abajo en un Angulo de 90º
con esta funcion me averigua ese Angulo de direcion de la Bola.
Source Code (Gemix) [ Download ] [ Hide ]
  • ANGLE=FGET_ANGLE(0,0,XSP*1000,YSP*1000);

y lo multiplico por 1000, para obtener mayor precision del angulo.

una vez sabido el angulo de la bola, en cuanto colisiona con una pared... la pared tambien tiene un Angulo.
Esto se calcula el Angulo de la Bola + el Angulo de la pared... y se hace el Nuevo Angulo de Destino/Rebote de la Bola
Ese Angulo se debe convertirse en nuevos valores XSP (horizontal), YSP (Vertical).
un ejemplo grafico:
Image

y con varios angulos de paredes y angulos de trayectoria de la bola diferentes:
Image

Seria algo parecido a esto:
Source Code (Gemix) [ Download ] [ Hide ]
  • XSP=VEL* cos(angle)/1000;
  • YSP=VEL*-sin(angle)/1000;

Lo que si, necesito Averiguar es la Velocidad de la Bola
Pero en una Variable Float VEL.

Esto deberia obtenerlo calculando XSP (horizontal)entre YSP (Vertical).
calculamos XSP=0 YSP=10; >> es igual a: VEL=10; :y:
PEro no es lo mismo que esto:
calculamos XSP=10 YSP=10; >> es igual a: VEL=10; :n: mal! :x
NO es lo mismo, ya que se esta moviendose en Diagonal a una distancia diferente.


y luego tengo un futuro problema y no se si es posible solucionarlo u_u
Image
Como es posible ajustar la colision en esos puntos... cuando la bola tiene un punto central de cordenada y un radio.
You do not have the required permissions to view the files attached to this post.
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME]: PYP - ProYect Pinball [Proyecto/Pausado]

Postby kozka » Thu Sep 06, 2012 2:05 pm

una cosa te digo ,otra vez, si vas a tratar de hacer unas fisicas realistas y buenas,te vas a encontrar muchos problemas . pero si es lo que quieres hacer adelante.
pero si lo que quieres es hacer un juego tipo pinball ,no te comas la cabeza demasiado y resuelve los problemas como hiciste con el sonic y como habias comentado con angulos estandar por colores o algo asi., y cosas asi.
User avatar
kozka
 
Posts: 2111
Joined: Sun Feb 01, 2009 9:36 pm

Re: [GAME]: PYP - ProYect Pinball [Proyecto/Pausado]

Postby SimulatorOne » Thu Sep 06, 2012 3:30 pm

Otro Test, y solo con primitivas graficas, no hay collision, solo detecta el color de fondo de pantalla con GET_PIXEL
Aqui no se puede mover el suelo de abajo, es pintado como fondo de pantalla.

Pero de momento hay 2 pruebas, pulsen Espacio para probar con la pared diagonal y otra la recta.
Esto es simplemente para comprobar la colision y que no la traspase aun que valla la bola a mucha velocidad, jamas se la traspasará

Source Code (Gemix) [ Download ] [ Hide ]
  • PROGRAM PYP_ProYect_Pinball;
  • CONST
  • PESO_BOLA=0.1F;//PESO DE LA BOLA
  •  
  • GLOBAL
  • STRING TX1,TX2,TX3,TX4;
  •  
  • word TAM_TABLERO[1]=500,700;//TAMAÑO DEL TABLERO
  •  
  • BOLAS_HAY;
  • COL0_Y,COL1_Y,COL2_Y;
  •  
  • COLOR_PARED;
  • COLOR_BOLA;
  • NUM_TEST;
  • LOCAL
  • FLOAT XF,YF,XSP,YSP;
  •  
  • Private
  • GAT=1;
  • BEGIN
  • VISIBLE=0;
  • SET_MODE(TAM_TABLERO[0],TAM_TABLERO[1],32,0,0,0);SET_FPS(60,0);
  •  
  • COLOR_BOLA=RGB(0,255,0);
  • COLOR_PARED=RGB(0,255,255);
  •  
  • text_size_x=text_size_y=200;
  • WRITE(0,TAM_TABLERO[0],TAM_TABLERO[1],8,TX4);
  • WRITE(0,0,0,0,TX1);
  • WRITE(0,0,20,0,TX2);
  • WRITE(0,0,40,0,TX3);
  •  
  • LOOP
  • TX1="Pulsa Enter para Lanzar la Bola!";
  • TX2="Pulsa Espacio para Probar otro Test!";
  • TESTS();
  •  
  • REPEAT
  • TX4=ITOA(FPS)+":FPS|TEST:"+ITOA(NUM_TEST);
  • if(gat and not key(_space));gat=0;end
  • FRAME;UNTIL(KEY(_ENTER)or(key(_Space)and not gat));
  •  
  • //JEFE MAIN
  • REPEAT
  •  
  • IF(BOLAS_HAY==0);
  •  BOLA(TAM_TABLERO[0]/2,80);
  • END
  • TX4=ITOA(FPS)+":FPS|TEST:"+ITOA(NUM_TEST);
  • FRAME;
  • UNTIL(KEY(_SPACE));GAT=1;
  • NUM_TEST++;IF(NUM_TEST==2);NUM_TEST=0;END
  • SIGNAL(TYPE BOLA,S_KILL);
  • DELETE_DRAW(ALL_DRAWING);CLEAR_SCREEN();
  • BOLAS_HAY=COL0_Y=COL1_Y=COL2_Y=0;TX3="";
  • END
  • END
  •  
  • FUNCTION TESTS();
  • BEGIN
  • X=TAM_TABLERO[0]/2;Y=TAM_TABLERO[1]-70;
  • PIEZA_OYO(X,80);
  •  
  • SWITCH(NUM_TEST);
  •         CASE 0:PIEZA_PARED(X-100,Y,X+100,Y);END
  •         CASE 1:PIEZA_PARED(X-150,Y-100,X+50,Y+100);END
  • END
  • END
  •  
  •  
  • FUNCTION PIEZA_OYO(X,Y);
  • BEGIN
  • PUT_CIRCLE(x,y,20,RGB(255,0,255),FALSE);
  • END
  •  
  • FUNCTION PIEZA_PARED(X,Y,x2,y2);
  • BEGIN
  • PUT_LINE(X,Y,X2,Y2,COLOR_PARED);
  • END
  •  
  • PROCESS BOLA(X,Y);
  • PRIVATE
  • ID_DRAW;
  • BEGIN
  • VISIBLE=0;
  • BOLAS_HAY++;
  • XF=X;YF=Y;
  • ID_DRAW=DRAW(4,0,0,0,0,0,0,0);
  • REPEAT
  •        
  •         IF(YSP>-1 AND KEY(_J));YSP=-5;END;//PRUEBA SALTO
  •        
  •         IF(YSP>0 AND KEY(_N));YSP=20;END;//PRUEBA CAIDA
  •         IF(YSP>0 AND KEY(_M));YSP=40;END;//PRUEBA CAIDA
  •        
  •         YSP+=PESO_BOLA;
  •  
  •         YF+=YSP;//calculamos la velocidad Y
  •  
  •         FIX_COLL_Y();//FUNCION PARA FIX DE PAREDES Y DESPLAZAMIENTO...
  •        
  •     MOVE_DRAW(ID_DRAW,COLOR_BOLA,255,x-8,y-8,x+8,y+8);
  •        
  •         TX1="Y(INT/P):"+itoa(Y)+" |SCY:"+ITOA(COL0_Y)+">"+ITOA(COL1_Y)+">"+ITOA(COL2_Y);
  •         TX2="Y(FLOAT):"+FTOA(YF);
  •         TX3="Y(Speed):"+FTOA(YSP);
  •  
  • FRAME;
  • UNTIL(Y>TAM_TABLERO[1]+8);// XOR Y<-8);
  • DELETE_DRAW(ID_DRAW);
  • BOLAS_HAY--;COL0_Y=COL1_Y=COL2_Y=0;
  • END
  •  
  • FUNCTION FIX_COLL_Y();
  • private
  • COLOR;
  • BEGIN
  •         Y=FATHER.YF;//CONVIERTE Y COPIA LAS CORDENADAS FLOAT A INT PIXEL
  •         REPEAT
  •        
  •                 IF(Y>FATHER.Y);FATHER.Y++;Z=8;END
  •                 IF(Y<FATHER.Y);FATHER.Y--;Z=-8;END
  •                
  •                 COLOR=GET_PIXEL(FATHER.X,FATHER.Y+Z);
  •                 IF(COLOR==COLOR_PARED);
  •                     COL0_Y=FATHER.YF+Z;
  •                         COL1_Y=FATHER.Y+Z;
  •                         REPEAT
  •                                 IF(FATHER.YSP=>0);
  •                                         FATHER.Y--;Z=8;
  •                                 ELSE
  •                                         FATHER.Y++;Z=-8;
  •                                 END
  •                                 COLOR=GET_PIXEL(FATHER.X,FATHER.Y+Z);
  •                         UNTIL(COLOR<>COLOR_PARED);
  •                        
  •                         FATHER.YF=FATHER.Y;
  •                         COL2_Y=FATHER.Y+Z;
  •                        
  •                         IF(FATHER.YSP=>1 OR FATHER.YSP<=-1);
  •                                 FATHER.YSP=get_pixl_dat(invert(FATHER.YSP),65);//REBOTE VERTICAL
  •                         ELSE
  •                                 FATHER.YSP=0;//EN SUELO VERTICAL
  •                         END
  •                        
  •                         BREAK;
  •                 END
  •                
  •         UNTIL(Y==FATHER.Y);
  • END
  •  
  • function FLOAT invert(FLOAT value);
  • BEGIN
  • return(-value);
  • end
  •  
  • function FLOAT get_pixl_dat(FLOAT VALUE,size);
  • begin
  • return((VALUE * size)/ 100);
  • end
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

PreviousNext

Return to Proyectos WIP

Who is online

Users browsing this forum: No registered users and 2 guests