2013-02-08 6 views
8

Sto usando box2d per la simulazione fisica. Sto muovendo un cerchio usando i tasti freccia applicando l'impulso sul corpo quando viene premuto un tasto. Sfortunatamente, il cerchio si muove atrocemente lento e non sembra accelerare come dovrebbe fare un vero corpo fisico. Le dimensioni del mio mondo sono 400x800 pixel. Il raggio del corpo del cerchio è 20f.C'è un limite superiore sulla velocità quando si usa box2d?

In base a this, il problema può essere risolto ridimensionando il raggio del cerchio verso il basso durante la sua creazione e aumentando la scala dopo aver ottenuto la posizione del corpo durante la verniciatura. Non sembra fare alcuna differenza. C'è qualche passo o impostazione che mi manca qui?

Code on pastebin

+0

Potresti condividere il codice pertinente? Per esempio. costruzione del corpo ecc. – Tom

+0

@Tom Aggiunto collegamento per codice su pastebin. Sto usando box2d con il motore di gioco libgdx - quindi il codice è in Java. – ivymike

+1

Stai effettivamente applicando l'impulso sul cerchio da qualche parte? 'ApplyLinearImpulse' – Tom

risposta

3

Sì, c'è una differenza tra i quali dimensioni si usa. Box2d funziona su numeri in virgola mobile e quindi la precisione è limitata e la qualità della simulazione è diversa. Box2d è sintonizzato per funzionare al meglio con corpi dinamici di dimensioni 0.1 to 10.

Quindi in generale si dovrebbe preferire di utilizzare un'unità per la fisica e l'altro per la grafica

Ora alla tua domanda. La velocità del corpo è influenzata da collisioni, attrito (se un corpo sta scivolando sull'altro) e da linear damping. Quindi controlla quale valore per linear damping usi (è un valore diverso da zero per impostazione predefinita, come ricordo). Non ci sono limiti di velocità, per quanto ne so, ma una velocità più alta fornirà collisioni di minore qualità se si utilizza lo stesso passo temporale.

+1

Sfortunatamente l'impostazione dello smorzamento lineare a zero non ha aiutato neanche :( – ivymike

19

Mi ci è voluto un bel po 'per capirlo, ma in realtà lo IS è un limite rigido per la velocità in Box2D. Vedere here:

C'è un limite di movimento massimo di 2,0 unità per passo il tempo, data nel file b2Settings.h nel codice sorgente.

Se si dispone di un passo per frame a 60 FPS, i corpi possono muoversi ad una velocità massima di 120 m/s. Forse questo salverà qualcuno un po 'di tempo un giorno.