Actualmente estoy desarrollando un juego para Android, y me gustaría su experiencia en un problema que he tenido.Desarrollo de juegos para Android: detección de colisiones fallidas
Antecedentes:
Mi juego incorpora la velocidad de fotogramas de movimiento independiente, que tiene en cuenta el valor delta tiempo antes de realizar velocidad necesaria cálculos.
El juego es un juego de plataformas en 2D tradicional.
El Problema:
Aquí está mi problema (simplificado). Vamos a pretender que mi personaje es un pie cuadrado en la parte superior de una plataforma (con "gravedad" es una velocidad constante hacia abajo de characterVelocityDown).
he definido la detección colisión de la siguiente manera (suponiendo Y puntos del eje hacia abajo):
Dado characterFootY es la coordenada y de la base de mi carácter cuadrado, platformSurfaceY es la ordenada superior coordenada de mi plataforma, y platformBaseY es la menor coordenada y de mi plataforma:
if (characterFootY + characterVelocityDown > platformSurfaceY && characterFootY + characterDy < platformBaseY) {
//Collision Is True
characterFootY = platformSurfaceY;
characterVelocityDown = 0;
} else{
characterVelocityDown = deltaTime * 6;
Este enfoque funciona p erfectly fine cuando el juego se ejecuta a velocidad normal; Sin embargo, si el juego se ralentiza, la DeltaTime (que es el tiempo transcurrido entre el marco previo y el actual) se hace grande, y characterFootY + characterVelocityDown superan los límites que definen la detección de colisiones y el carácter justo cae directo (como si fuera teletransportarse).
¿Cómo debo abordar este problema para evitar esto?
Gracias de antemano por su ayuda y estoy deseando aprender de usted!
Si alguien más tiene este problema, una posible solución para esto es limitar el valor deltaTime para que cuando sea mayor a un cierto valor, simplemente lo ajuste al límite. Esto haría que la velocidad de juego fuera inconsistente, pero debería estar bien en la mayoría de los casos. – SeveN
¿Tiene los valores delta antes y después, ya que la comparación se puede hacer allí? – cjk