Je travaille sur l'écriture d'un jeu Pong et j'ai rencontré un problème. J'essaie de comprendre comment faire rebondir un point hors d'une ligne.Comment faire rebondir un point d'une ligne?
La meilleure méthode que je peux comprendre le faire avec est
- Calculer la position actuelle et future de la balle.
- Segment de ligne: {Ball.location, Ball.location + Ball.direction} (Ball.location et Ball.direction utiliser un vecteur personnalisé/classe de coordonnées)
- Calculer si le segment ligne généré intersecte avec l'un des murs ou des pagaies.
- ??? Je ne sais pas comment faire encore (demanderez une question distincte)
- À la première intersection trouvée
- rebondir la balle hors de la ligne
- Créer un triangle formé avec
- a = position actuelle ball
- b = point d'intersection de la ligne.
- c = Point le plus proche de la position actuelle de la balle sur la ligne.
- trouver l'angle que la balle frappe la ligne
- angle = cos (distance (b, c)/distance (a, b))
- trouver l'angle pour faire pivoter le la direction de balle
- (90 - angle) * 2
- direction de Rotation à billes et à le déplacer t o il est nouvelle position
- la distance ignorant parcourue à frapper la ligne pour l'instant, n'a pas besoin d'être exactement sur la ligne
- Créer un triangle formé avec
- rebondir la balle hors de la ligne
- Sinon, s'il n'y a pas d'intersection
- Déplacez la balle dans sa nouvelle position.
Est-ce une méthode acceptable ou suis-je manque quelque chose?
Vous oubliez de rebondir sur l'un des murs latéraux ou de sortir des limites. – epochwolf
C'est le même calcul. Si la balle entre dans son rayon d'un obstacle, sa direction devrait changer. Vérifiez simplement si elle dépasse une certaine coordonnée X pour savoir si elle est hors limites. –
Que voulez-vous dire par "dans son rayon". J'ai rejeté un rebond à proximité de la méthode car il serait possible que la balle dépasse la valeur de proximité en une seule étape. (Il y a une commande pour accélérer ou geler la balle pendant x étapes) – epochwolf