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

Proyectos en Desarrollo.
User avatar
erkosone
Posts: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

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

Post by erkosone »

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
SimulatorOne
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona
Contact:

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

Post by SimulatorOne »

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
Contact:

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

Post by SimulatorOne »

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
kozka
Posts: 2111
Joined: Sun Feb 01, 2009 9:36 pm

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

Post by kozka »

Tiene muy buena pinta , te falta la fuerza de la gravedad y colision con mas bolas(si lo quieres complicar)
User avatar
erkosone
Posts: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

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

Post by erkosone »

Tiene fallos, aveces la bola se vuelve loca y sale por debajo de la plataforma.
User avatar
SimulatorOne
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona
Contact:

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

Post by SimulatorOne »

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
kozka
Posts: 2111
Joined: Sun Feb 01, 2009 9:36 pm

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

Post by kozka »

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
SimulatorOne
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona
Contact:

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

Post by SimulatorOne »

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.
[Codebox=gemix file=Untitled.gemix]ANGLE=FGET_ANGLE(0,0,XSP*1000,YSP*1000);[/Codebox]
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:
[Codebox=gemix file=Untitled.gemix]XSP=VEL* cos(angle)/1000;
YSP=VEL*-sin(angle)/1000;[/Codebox]
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
kozka
Posts: 2111
Joined: Sun Feb 01, 2009 9:36 pm

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

Post by kozka »

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
SimulatorOne
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona
Contact:

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

Post by SimulatorOne »

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á

[Codebox=gemix file=Untitled.gemix]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[/Codebox]
Post Reply

Return to “Proyectos WIP”