Yo usaría el valor de colisión de acuerto a un baremo de 'tensión del cordaje de la raqueta' , es decir el cordaje muy tenso podría tener un valor 5 y el cordaje menos tenso un valor de -5 por ejemplo , así tendrías 11 niveles de tensión. Este mismo valor serviría para determinar luego la fuerza de rebote, la exactitud del ángulo del rebote y por tanto la capacidad de 'efectos'.
Cuánto más tensa, con mayor fuerza devuelve la pelota también con mayor precisón resulta el ángulo pero la posibilidad de efecto es nulo y al revés cuanto menos tensa (-5) con menos fuerza devuelve la pelota, la precisión del ángulo de rebote es menor pero hay grandes posibilidades de hacer efectos
Los efectos serían la diferencia que hay entre un 'tiro tenso' y un 'tiro parabólico', el efecto lo calcularíamos como la variación de la posición de la raqueta cuando el valor de colisión es (pongamos 200) y cuando alcanza el valor de colisión para la tensión elegida por el usuario teniendo en cuenta la velocidad de la pelota. un ejemplo de suposición, cuando la posición de la pelota para una colisión es 200, o menos tomamos la posición de la raqueta, calculamos el ángulo de la pelota con la raqueta y le llamamos 'angulo de llegada' cuando la pelota impacta (el valor de colisión determinado según el nivel de tensión de la cuerda) tomamos nuevamentela posición de la raqueta para determinar el 'ángulo de impacto'. Ahora con el ángulo de llegada, el ángulo de impacto, la velocidad de la pelota y la tensión de la cuerda debes determinar una trayectoria de rebote y una velocidad de rebote. Adicionalmente podrías alterar estos valores en función de la distancia al centro de la raqueta donde impacte la pelota, le daría más realismo pero tus cálculos serían un poco más complejos.
Por supuesto los mismos valores: angulo de llegada, ángulo de impacto, velocidad de la pelota y tensión de las cuerdas (no hemos considerado tensión de la raqueta (la fuerza con que se sujeta la raqueta), ni aceleración de la raqueta (diferencia de tiempo que transcurre entre el cálculo del angulo de llegada y el angulo de impacto, es decir acerco la raqueta a la pelota, mantengo la distancia o alejo la distancia?, el cual influye en la fuerza de rebote) ni como decíamos antes, lugar de impacto sobre la raqueta (no es lo mismo que pegue en el centro que próximo a un extremo)) podrías usarlo para calcular el movimiento de la raqueta.
Calcular los valores:
* Velocidad de la pelota: Velocidad de salida de la pelota (desde el jugador contrario) menos la pérdida unitaria por distancia en base a la trayectoria seguida. también podrías calcularla como velocidad de salida de la pelota - tiempo transcurrido. Este valor en todo caso se calcula cuando la pelota está a una distancia de colisión de 200 o menos. (distancia de precolisión y que asociamos con el material de la raqueta cuando el golpe va a proceder con la raqueta y con el tipo de pista y escenario cuando rebota en el suelo). Al hablar más abajo de tensión de pista, se explica más sobre esto.
* Angulo de llegada: Angulo formado entre el centro de la raqueta y el centro de la pelota cuando esta en distancia de precolisión.
* Angulo de impacto: angulo formado entre el centro de la raqueta y el centro de la pelota cuando ésta hace colisión.
* Tensión de las cuerdas: ya vimos que este valor es una constante elegida por el jugador y que va asignada a la tensión de las cuerdas de la raqueta. Es una propiedad de la raqueta.
Si los añades ...:
* Tensión de Pista: para simular rebotes en el suelo .... es equivalente a considerar un jugador excepto en 2 cosas el cálculo es más simple porque no hay , elementos de cálculo 'extra' (los que se detallan debajo). El valor de distancia de precolisión, en vez de 200, podría variar según sea un suelo de tierra o hierba y además variar ligeramente estos valores según la pista donde se juegue: por ejemplo Roland Garrós: tierra = 230, Hierba = 200, Sidney; Tierra= 240, hierba = 180; Winbledon Tierra= 210, hierba= 170..etc... quédate con la idea, no con los valores.
Otra cosa para calcular rebotes de pista, la velocidad de precolisión aumenta con la gravedad, por lo que aquí importa el valor y máximo alcanzado, pero incluso más que el valor y importa la relación xy, distancia x entre el jugado que golpeó entre la altura máxima alcanzada. Este valor lo calculas como un factor de suma para la velocidad de salida del rebote, deberás probar una constante que se multiplica por dicho factor calculado, para ver que tenga un efecto lo más realista posible sin encarecer tus cálculos. Es decir si tu calculaste una velooocidad de rebote de 80Km/h este factor podría darte un valor a sumar en un rango +- 10%, 10% cuando salió un 'globo' y -10% cuando se hizo una dejada cerca de la red y una altura no mayor de 2 metros (por poner un ejemplo). Fíjate como un valor 0, prácticamente sería cuando se golpea desde la línea de fondo y la pelota no supera los 2 metros de altura, luego un valor negativo será cuando x sea un valor menor y será un valor positivo cuando la pelota tienda a subir más alto de 2 metros y cuanto más cerca de la red... esto te da una idea aproximada de como hallar un valor eficaz.
* La tensión de la raqueta: es una suma a la tensión de las cuerdas, pero digamos que la tensión de las cuerdas es constante y la tensión de la raqueta podría definirse para el jugador en cada movimiento (golpe), si quiere hacer una dejada cerca de la red, tendrá que tener una tensión de raqueta muy baja con respecto a si quiere hacer una dejada estando lejos de la red.
* El lugar de impacto en la raqueta: De modo similar, es una suma para ese 'golpe' a la tensión de las cuerdas, influye también en el ángulo de salida.
* La velocidad de movimiento de la raqueta (en busca de la pelota):, también es un valor a sumar a la tensión de las cuerdas, éste valor influirá en la velocidad de devolución y en ciertos efectos en el eje x/z é y/z (normalmente más en uno que en otro).
Nota: yo he puesto un valor de 200 (2 metros) como distancia de precolisión, pero en la práctica tendrás que probar, la idea es simplemente establecer el concepto, más que el valor.... y recuerda que ese valor puede y debería ser también un factor unido a la raqueta podrías reflejarlo como una propiedad del material de la raqueta, madera, plástico, metal y por tanto variar entre una gama de valores....
Calcular un valor para la precolisión debería ser basado en el tiempo y las distancias empleadas, supongamos que empleas distancias en cm. y que la pista tiene 24 metros, entonces deberíamos definir un tiempo de reacción del usuario que puede ser aproximadamente de menos de 1 segundo, luego la precolisión va relacionada con la distancia que la pelota sería capaz de recorrer en ese tiempo, como no es una situación real, podriamos conformarnos con que este valor sea fijo para una distancia o para un tiempo, si lo haces para el tiempo resultará más practico calcularlo en el temporizador pero posiblemente no sea tan eficaz ya que subyugas la veocidad de respuesta del jugador tanto si la pelota va a 150km/h como si va a 30km/h, basarlo en distancia es más realista, pero complica los cálculos, entonces el tiempo de reacción del oponente dependerá de la velocidad de la pelota, que efectivamente es más realista aunque tampoco exacto. Sin embargo utilizar inicialmente un valor basado en el tiempo te permite experimentar con mayor comodidad y te ayudará a encontrar un valor óptimo basado en la distancia, por eso no desprecies usar en pruebas un valor basado en el tiempo de reacción por ejemplo 1 segundo para empezar a probar estaría muy bien... pero naturalmente tendrías que ir reduciendo hasta llegar posiblemente a tiempos de 50-300milisegundos. (no pases por alto la jugabilidad aunque suponga falsificar al alza estos valores, si no resultará un juego muy difícil).
Un valor de 150 km/h (como valor de saque) es una velocidad de 41'6 m/sg luego a esa velocidad la pelota tarda apenas medio segundo en cruzar la pista de extremo a extremo, esa velocidad va decayendo, de modo que debe actualizarse constantemente, luego el resto del peloteo alcanza velocidades mucho menores también influídos por las distancias a recorrer.
Nota 2: la colisión debe estar sincronizada con el 'avance mínimo' del movimiento de la raqueta, por ejemplo si tu avance es 0'8 (como indicas que tienes) la colisión sobre las cuerdas debe estar en el rango -0'4 a + 0'4 (para una tensión de cuerdas igual a 0, para una tensión de cuerdas igual a 3 debería estar entre 2'6 y 3'4), y la precolisión (usando por ejemplo el valor de 200) un valor 10 veces mayor en: 196 a 204. (8 cm de recorrido)
p.d.: Como necesitas un timer para ir actualizando el avance de la pelota, debes establecer 2 comparaciones, si la pelota toca el suelo antes de la red o no, una vez sobrepasada la red, ahora empezamos a comparar el momento en que la pelota alcance la distancia de precolisión para calcular los valores previos para el cáclulo de un rebote sea del jugador o del suelo, si se produce un rebote en el suelo ahora, es claro que el movimiento de avance sigue pero con valores actualizados por el rebote. sobrepasar la red para entrar en la pista del jugador contrario por tanto es un buleano:
Operativa del temporizador:
actualizar avance pelota
actualizar desplazamiento de jugadores (raquetas) si hubiere lugar
si red false luego (la pelota aún está en el campo del que saca)
si precolision luego
colision igual calcular si colisión en suelo
si colision suelo luego
punto perdido para el jugador, botó en su propio campo
esto implica: parar temporizador, actualizar puntos, pelota en manos del jugador correspondiente para saque
fin si
no precolision
precolision igual calcular si precolisión en suelo
si precolision luego
calcular condiciones de llegada
fin si
fin si
red igual calcular si red (si se sobrepasó la red consultando el valor x), según el turno del jugador
si red true luego
si precolision luego
colision igual calcular si colisión en suelo
si colision suelo luego
si botes igual 0 luego
si botó dentro campo luego
recalcular trayectoria
botes igual 1
colision igual false
precolision igual 0
si botó fuera de campo
punto perdido para último jugador que golpeó pelota
fin si
si botes igual 1 luego
punto ganado para último jugador que golpeó pelota
fin si
si colision jugador luego
calcular Rebote
fin si
no precolision
precolision igual calcular si precolisión en suelo o jugador
si precolision luego (sea un tipo u otro): precolisión=0 no hay presolisión, precolisión=1 precolisión de suelo, precolision= 2 precolisión de jugador, precolisión= 3 precolisión de suelo y jugador (la colisión determinará que sucede al final si jugador o suelo).
calcular condiciones de llegada
fin si
fin si
fin si