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

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

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.

hacer otro juego no creoo..voy a aumentar la MASK a ver que pasa ..

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=

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

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


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
}



mirate este videotutorial que creo que puede tener las respuestas a tus preguntas :) https://www.youtube.com/watch?v=vZ0E06E-K4U


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