J'ai un jeu simple dans lequel le joueur déplace une balle. La balle rebondit sur les murs. En ce moment, j'ai des murs carrés (■) mis en œuvre: j'utilise de simples collisions dans la boîte englobante pour vérifier si le joueur se déplacera dans un mur lors de la mise à jour de sa vitesse x ou y et si oui, je multiplie cette vitesse par -1 pour les faire rebondir .
Cependant, je veux également implémenter des pièces triangulaires (◢◣◤◥). Pour rebondir, je crois que l'on peut simplement utiliser:
newxspeed = -1*yspeed;
newyspeed = -1*xspeed;
Cependant, ce qui me pose problème, c'est la détection de collision: quand le joueur frappe-t-il la diagonale?
Réponses:
Tout d'abord, pour calculer la détection de collision entre une sphère (cercle en 2D) et une ligne, vous devez calculer le vecteur perpendiculaire entre le centre de la balle en mouvement et la ligne, afin de calculer cette distance, vous devez procéder comme suit:
Donc, pour calculer d dans la figure ci-dessus, nous devons faire quelques étapes.
Ensuite, vous développez l'équation pour obtenir ce qui suit, cela semble un peu compliqué, mais ce n'est pas le cas.
Où Q est le centre du cercle et S est n'importe quel point sur la ligne. Une fois que la distance est inférieure au rayon du cercle / sphère, vous devez déclencher la réponse à la collision, ce qui est expliqué au point suivant.
Il est incorrect de toujours retourner la composante x ou y pour faire rebondir la balle, ce que vous devez faire est de refléter le vecteur de vitesse, pour ce faire, vous devez calculer le vecteur normal de la surface et utiliser cette normale pour calculer la réflexion vecteur en utilisant l'équation suivante
où R est le vecteur de réflexion, N est la normale de la surface et V est le vecteur de vitesse.
En cas de 45 degrés, votre normale de surface sera N = (1,1,0) avec un signe variable selon la direction dans laquelle les faces normales (position ou négatif).
la source
Vous voulez mesurer la distance entre le centre de votre balle et le mur, donc:
résoudre le système que vous voyez dans l'image vous donnera les coordonnées du point d.
Ensuite, si la distance entre le point d et c est inférieure ou égale au rayon de la balle r, il y a collision entre la balle et le mur
la source
Les balles sont en fait des objets assez simples pour la détection des collisions. Ils entrent en collision avec le terrain lorsque la distance entre le centre de la balle et le bord du terrain devient inférieure au rayon de la balle. La position du centre du ballon doit être triviale à obtenir. Trouver le point de terrain le plus proche est généralement plus compliqué et la meilleure façon de le faire dépend de la façon dont le terrain est représenté.
Votre algorithme pour calculer la nouvelle vitesse après avoir rebondi sur une pente diagonale est incorrect. Inverser les coordonnées x et y fera revenir la balle dans la même direction que celle à laquelle elle a approché la pente. C'est très bien si le ballon arrive sur le terrain à partir d'un angle droit, mais échoue pour d'autres angles. Vous voudrez annuler uniquement le composant normal à la surface, par exemple lorsque vous rebondissez sur le plafond, vous annulez y, pas x.
la source