Far rimbalzare una palla Box2D ad altezza costante


8

Voglio creare un gioco come Doodle Jump. Sto usando libgdx e Box2d. Ho bisogno di consigli su come far rimbalzare la palla costantemente e alla stessa altezza.

Ho provato a impostare la restituzione del corpo della palla a 1 in modo che possa saltare costantemente, ma quando salto su un blocco "l'impulso" è più piccolo. Ho anche cercato di rilevare la collisione, quindi applicare un impulso, ma non ha funzionato neanche.

Come posso far rimbalzare la palla alla stessa altezza ogni volta?


6
Potresti prendere in considerazione l'idea di implementare la tua "fisica" invece di usare box2d. Un gioco come il salto con i doodle non richiederebbe troppo lavoro per realizzare senza un motore fisico.
jgallant,

Risposte:


15

inserisci qui la descrizione dell'immagine

Quando la palla (curva rossa della traiettoria) colpisce un blocco più in alto (rettangolo blu), si muoverà più lentamente rispetto a quando colpisce un blocco più in basso (rettangolo verde). Ecco perché non rimbalza più in alto rispetto a dove proviene.

Fisicamente, questo ha senso.

Doodle Jump ovviamente non è fisicamente preciso. Se vuoi un effetto come in Doodle Jump in cui l'impulso da una collisione è sempre lo stesso, dovresti impostare te stesso la velocità verticale su un valore ogni volta che si verificano collisioni, con ball.speed.y = 7;o simili.


2

I mondi Box2D usano smorzamento e attrito, considera che il mondo potrebbe applicare uno smorzamento ai tuoi oggetti mentre vengono simulati.


1

Vorrei anche aggiungere al mix che potrebbe non essere necessario utilizzare un motore fisico per questo. A seconda di come vengono gestite le collisioni del tuo gioco (in particolare, la risposta alla collisione) potresti scoprire che puoi creare un sistema di box di delimitazione molto semplice sul quale hai il controllo completo. In effetti, nei giochi in stile "doodle jump" è ancora più semplice. Invece di preoccuparsi di rilevare le collisioni in box2d e capire se la collisione debba essere disabilitata o meno (ad esempio, colpire una piattaforma da sotto), lo scenario del salto con i doodle in realtà è molto più semplice. Se la tua palla sta viaggiando "verso il basso" (y sta diminuendo) e passa il valore y di una piattaforma, ed è all'interno dei limiti sinistro / destro di una piattaforma, allora si scontra. L'unica cosa veramente "complessa" è la traiettoria di volo parabolica che avresti seguito,http://en.wikipedia.org/wiki/Parabola#Equation_in_Cartesian_coordinates ).

Le collisioni con altri oggetti nel mondo che non richiedono una risposta (ad es. Colpire un bonus) possono essere facilmente risolte con solo i riquadri.

Box2D è fenomenale, ma spesso è eccessivo se hai requisiti semplici .. IMO.


0

Ricorda (float value = velocity.y) la velocità della palla prima che si scontri con la piattaforma e imposta dopo il rimbalzo: ball.velocity.y = valore * (-1)

Forse sarai interessante guardare in questo post:
primo post
secondo post

PS Non posso inviare il codice qui, per favore guarda nel "primo post" nell'ultimo commento. C'è un codice su come ho risolto un problema simile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.