Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: eams1986 en Febrero 05, 2015, 09:16:08 PM

Título: Se traspasa cuando aumenta .
Publicado por: eams1986 en Febrero 05, 2015, 09:16:08 PM
Amigos makeros a ver si alguien me da una mano..

estoy teniendo problemas con un juego para android parecido al ping pong

pero pasa que cuando el score llega a 50 digamos la velocidad de la bola aumenta a 30 speed

entonces cuando colisiona con las barras la pelota se traspasa.

Gracias de antemano espero me comprendan los que he dicho

les dejo una fotio para que vean
Título: Re:Se traspasa cuando aumenta .
Publicado por: penumbra en Febrero 05, 2015, 09:25:39 PM
Es porque la velocidad es mucha para el grosor (ancho) de las paredes. En un STEP la pelota está a punto de tocar la pared, pero al otro STEP, la pelota avanza 30 pixeles y si la pared es menos ancha que eso, pues nunca se produjo una colisión.  Cuando la velocidad es alta, sería necesario cambiar la máscara de colisión de las paredes a una mas ancha para que pueda detectarse la colisión.

http://docs.yoyogames.com/source/dadiospice/002_reference/objects%20and%20instances/instances/instance%20properties/mask_index.html (http://docs.yoyogames.com/source/dadiospice/002_reference/objects%20and%20instances/instances/instance%20properties/mask_index.html)

O diseñar el juego con física. Supongo que la detección de colisiones y cálculos son más precisos y podría evitarse este problema de que se traspasan, incluso se puede marcar la pelota como bala, para que los cálculos sean todavía más precisos a velocidades altas.
Título: Re:Se traspasa cuando aumenta .
Publicado por: eams1986 en Febrero 05, 2015, 09:36:32 PM
hacer otro juego no creoo..voy a aumentar la MASK a ver que pasa ..
Título: Re:Se traspasa cuando aumenta .
Publicado por: eams1986 en Febrero 05, 2015, 09:39:07 PM
tampoco funciona y aparte de 30 la velocidad va aumentar a 40,50,60,70,80 y tendria que haber una mask immensa .

no se como hacer ..

otra solucion .

Gracias=
Título: Re:Se traspasa cuando aumenta .
Publicado por: omick en Febrero 06, 2015, 08:14:05 AM
hola..  otra solucion podria ser que aumentes la velocidad del juego o room_speed  que por defecto es 30 en propiedades de room... 
asi todo avanzaria mas rapido y ahora solo reduce speed en la bolita y las barras (y todo jeje), pero hay mejores colisiones
Título: Re:Se traspasa cuando aumenta .
Publicado por: zorge en Febrero 06, 2015, 01:22:04 PM
otra opcion que se me ocurre es que dibujes un sprite transparente igual que la barra con las mismas caracteristicas y con un grosor a lo mejor de 200 asi te aseguras que siempre colisiona con algo
Título: Re:Se traspasa cuando aumenta .
Publicado por: eams1986 en Febrero 07, 2015, 05:15:08 AM
Gracias amigos pero no lo consigo hacer ..
Título: Re:Se traspasa cuando aumenta .
Publicado por: 3dgeminis en Febrero 07, 2015, 06:43:46 AM
Tengo una pregunta, porque esas velocidades tan grandes, siendo 30 un valor bastante alto y no digamos 80 que ya es imposible ???
Yo uso un codigo para mover a los lados que aguanta velocidades de 100 aun contra objetos de 1 pixel, pero se maneja con x+=1 y no con angulo, no sabria como adaptarlo. Si alguien puede hacerlo lo dejo aqui

for(i=0 ; i<velocidad ; i+=1)
{
  if place_meeting(x+1,y,pared) break;  x+=1
}
Título: Re:Se traspasa cuando aumenta .
Publicado por: eams1986 en Febrero 07, 2015, 10:06:58 PM
Pues la verdad no sabria hacerlo de otra manera..
Título: Re:Se traspasa cuando aumenta .
Publicado por: eams1986 en Febrero 09, 2015, 04:40:01 AM
Estoy ya deseperado con esto no lo consigo solucionar .
Título: Re:Se traspasa cuando aumenta .
Publicado por: zorge en Febrero 09, 2015, 05:03:28 AM
mirate este videotutorial que creo que puede tener las respuestas a tus preguntas :) https://www.youtube.com/watch?v=vZ0E06E-K4U
Título: Re:Se traspasa cuando aumenta .
Publicado por: eams1986 en Febrero 09, 2015, 06:58:40 AM
Nada no logre solucionar nada.. :-X :-X :'( :'(
Título: Re:Se traspasa cuando aumenta .
Publicado por: 3dgeminis en Febrero 09, 2015, 06:04:12 PM
Victoria !!! bueno, casi, aun tiene algunos problemas pero quedo bastante bien y como parece que tu juego no tiene esquinas para colisionar no creo que halla problemas. Mira pone este codigo en el evento STEP de la pelota

for(i=0;i<speed;i+=1)
{
if collision_rectangle(x+32,y+2,x+33,y+30,bloc,0,1) hspeed*=-1 break
}

for(i=0;i<speed;i+=1)
{
if collision_rectangle(x-1,y+2,x,y+30,bloc,0,1) hspeed*=-1 break
}

for(i=0;i<speed;i+=1)
{
if collision_rectangle(x+2,y,x+30,y+1,bloc,0,1) vspeed*=-1 break
}

for(i=0;i<speed;i+=1)
{
if collision_rectangle(x+2,y+32,x+30,y+33,bloc,0,1) vspeed*=-1 break
}


Lo uqe hace es ver la colision que hace la pelota por los 4 lados y de acuerdo a eso invierte la velocidad horizontal y vertical. Lo probe con velocidad de 100 y anda bien. Solo un problema y es que si colisiona con una esquina la pelota traspasa la pared. Esto es porque solo tiene en cuenta un lado a la vez y cuando son 2 lados al mismo tiempo hay problemas :-[

No tengo idea porque usas velocidades tan altas pero ya me imagino que la jugabilidad a esas velocidades sera horrible :(