Faire rebondir une balle Box2D à une hauteur constante

8

Je veux créer un jeu comme Doodle Jump. J'utilise libgdx et Box2d. J'ai besoin de conseils pour faire rebondir ma balle constamment et avec la même hauteur.

J'ai essayé de mettre la restitution du corps de la balle à 1 pour qu'elle puisse sauter constamment, mais quand je saute sur un bloc, "l'impulsion" est plus petite. J'ai également essayé de détecter la collision, puis d'appliquer une impulsion, mais cela n'a pas fonctionné non plus.

Comment puis-je faire rebondir la balle à la même hauteur à chaque fois?

Ion Farima
la source
6
Vous voudrez peut-être envisager de déployer votre propre "physique" au lieu d'utiliser box2d. Un jeu comme le doodle jump ne nécessiterait pas trop de travail sans moteur physique.
jgallant

Réponses:

15

entrez la description de l'image ici

Lorsque la balle (courbe de trajectoire rouge) frappe un bloc plus haut (rectangle bleu), elle se déplace plus lentement que lorsqu'elle frappe un bloc plus bas (rectangle vert). D'où pourquoi il ne rebondit pas plus haut que son origine.

Physiquement, cela a du sens.

Doodle Jump n'est évidemment pas physiquement précis. Si vous voulez un effet comme dans Doodle Jump où l'impulsion d'une collision est toujours la même, vous devez définir vous-même la vitesse verticale à une certaine valeur chaque fois que des collisions se produisent, avec ball.speed.y = 7;ou similaire.

Anko
la source
2

Les mondes Box2D utilisent l'amortissement et le frottement, considérez que le monde peut appliquer un amortissement à vos objets lorsqu'ils sont simulés.

Evan
la source
1

Je voudrais également ajouter au mélange qu'il n'est peut-être pas nécessaire d'utiliser un moteur physique pour cela. Selon la façon dont vos collisions de jeu sont gérées (en particulier, la réponse à la collision), vous pouvez trouver que vous pouvez créer un système de boîte englobante très simple sur lequel vous avez un contrôle complet. En fait, dans les jeux de style "doodle jump", c'est encore plus facile. Plutôt que de se soucier de détecter les collisions dans box2d et de déterminer si la collision doit être désactivée ou non (par exemple, vous frappez une plate-forme par en dessous), le scénario de saut de doodle est en réalité beaucoup plus simple. Si votre balle se déplace "vers le bas" (y diminue) et qu'elle passe la valeur y d'une plate-forme, et qu'elle se trouve dans les limites gauche / droite d'une plate-forme, alors elle entre en collision. La seule chose vraiment "complexe" est la trajectoire de vol parabolique que vous suivriez,http://en.wikipedia.org/wiki/Parabola#Equation_in_Cartesian_coordinates ).

Les collisions avec d'autres objets dans le monde qui ne nécessitent pas de réponse (par exemple, toucher un bonus) peuvent être facilement résolues avec seulement des boîtes englobantes.

Box2D est phénoménal, mais souvent exagéré si vous avez des exigences simples .. IMO.

Jason
la source
0

Rappelez-vous (float value = velocity.y) la vitesse de la balle avant qu'elle n'entre en collision avec la plate-forme, et définie après le rebond: ball.velocity.y = valeur * (-1)

Peut-être serez-vous intéressant de regarder dans ces articles:
premier message
deuxième message

PS Je ne peux pas soumettre de code ici, veuillez regarder dans "premier message" dans le dernier commentaire. Il y a du code pour résoudre un problème similaire.

Raton laveur
la source