2010-06-02 6 views
5

Come una rapida panoramica: sto cercando di creare una partita di pool usando Box2D come base. Ora la mia domanda:Come fare il biliardo in Box2D e impedire alle palline di rimanere bloccate sui muri?

Come devo impostare le bilie e i bordi in modo che si comportino normalmente? Le palle a volte sembrano attaccarsi ai bordi senza una ragione apparente. Ho quattro oggetti di muro statici con una restituzione di 1 attorno ai bordi del tavolo.

Ogni sfera ha le seguenti proprietà:

friction: 0.3 
restitution: 0.3 
density: 58.474822 (kg/m^2) 
radius: 0.028575 (m) 

e la stecca ha una densità di 101,356,358 mila (kg/m^2)

Quando si applica un impulso di spunto di 1,2 kg-m/s, la palla sembra muoversi a una normale velocità della palla da biliardo e rimbalza contro i muri per lo più correttamente. Tuttavia, a volte quando una palla colpisce un muro non rimbalza affatto, semplicemente si ferma, o semplicemente continua a viaggiare lungo il muro. Questo sembra strano e sembra sbagliato. C'è un modo migliore per impostare questo?

+1

Non ho dimestichezza con Box2D, ma sembra che tu abbia trovato un bug in esso. – Beta

+0

Possibile duplicato di [Come posso evitare che una palla si attacchi ai muri in Box2D?] (Https://stackoverflow.com/questions/5381399/how-can-i-prevent-a-ball-from-sticking-to- walls-in-box2d) –

+0

Si noti che questa domanda è stata presentata un anno prima di quella che presumibilmente duplica. –

risposta

6

Box2D è progettato per funzionare al meglio con unità di lunghezza comprese tra 0,1 e 10 (metri se lo si desidera), e più si esce da questo intervallo, più è suscettibile di imprecisioni numeriche.

Provare a ridimensionare il sistema in modo che la sfera abbia raggio 1.0 e ridimensiona il resto di conseguenza. È possibile mantenere le proprietà del materiale così come sono, ma l'impulso deve essere potenziato.

L'incollamento potrebbe anche essere causato dal fatto che il corpo si addormenta quando la sua velocità scende al di sotto di una soglia. È possibile evitare ciò impostando allowSleep su falso nella struttura b2BodyDef. Ma sappi che i corpi che non vanno mai a dormire consumano molto più tempo della CPU rispetto ai corpi che fanno, quindi questo dovrebbe essere usato con cura.

+0

Beh, sicuramente non dormono, dal momento che si muovono ancora lungo il bordo del muro. –

+0

Sì, intendevo quelli che si sono fermati. ;) Ho avuto problemi con il sonno prematuro fino a quando non ho riscalato le mie coordinate. Poi sembrò andare via. –

+0

Ora sembra molto meglio! –

Problemi correlati