2013-03-09 14 views
13

Ho un corpo con una massa di 10 e ad ogni ciclo del programma applico una forza di 100 utilizzando il metodo semplice;Box2D velocità del corpo cap?

Vector2 force = new Vector2(0, 1) * 100; 
bod.ApplyForce(force, bod.GetWorldCenter()); 

E le grandi opere, accelera e tutto questo, ma una volta che si arriva a una velocità di 10 (100/10 presumo) non andrà più veloce. Io non sono un fisico in alcun modo, ma ricordo che il corpo dovrebbe continuamente accelerare, come se fosse sotto gravità. Questo limite di velocità è il risultato del modo in cui Box2D fa qualcosa, o sto davvero rovinando qualcosa? Inoltre, cosa devo fare per risolverlo.

NOTA: ottengo la stessa velocità limitata se uso ApplyLinearImpulse invece di ApplyForce

Aggiornamento: Sono ben consapevole del limite di velocità massima complessiva imposto dal Box2D (in b2Settings.h). Nel mio esempio, l'oggetto in questione si sta muovendo ben al di sotto di questo limite poiché la modifica della forza applicata, sia essa 1000 o 10000 arriverà sempre alla velocità massima di (forza/massa).

+0

Questa non è una risposta adeguata, ma forse dovresti lavorare con una scala generale più piccola. In questo modo è possibile applicare forze più piccole e quindi non rimanere bloccati da alcuni limiti di forze. Spesso a Box2d non piace quando lavori su una base troppo grande. – phemios

+0

la scala è a posto. un oggetto ha una massa di 10 kg e io sto applicando una forza di 100N ad esso. La velocità ridotta si riduce a 10 m/s, il che è decisamente nel range di scala per Box2D. –

+1

Avete controllato lo smorzamento lineare? – Davos555

risposta

3

Stai colpendo la velocità massima consentita di un oggetto. Esistono due modi per risolvere questo problema:

  1. Regolare la velocità massima consentita nelle impostazioni Box2D; Apri Impostazioni e modifica il valore MaxTranslation float/const a un valore più alto, presumo che sia impostato su 2.0.

  2. Ridimensionare le dimensioni dell'oggetto, eseguire i calcoli necessari, ridimensionare gli oggetti. Questo è il modo tecnicamente corretto di farlo, come i commenti di Box2D per MaxTranslation nota:

La velocità massima lineare di un corpo. Questo limite è molto ampio e viene utilizzato per prevenire problemi numerici. Non dovresti aver bisogno di aggiustarlo.

Quindi prova # 1, e se funziona, significa che probabilmente hai bisogno di ridimensionamento. Spero possa aiutare.

+0

Questa risposta continua a spuntare ed è sbagliata. Si prega di leggere l'intera domanda, in particolare la parte menzionata 'Aggiornamento' –

+0

Sei sicuro di avere un ** velocità ** di 10 m/s? O stai effettivamente colpendo 10 metri di distanza per passo temporale? Box2D sta segnalando movimento in distanza per passi temporali, quindi se si assume 60Hz, un dato corpo che copre il valore predefinito di 'MaxTranslation' di' 2.0' unità per timestep si sta effettivamente muovendo ad una velocità di 120 m/s. Non intendo sembrare scortese, ma penso che potresti confondere i due. –

+0

sì, sono positivo. Sono molto consapevole di ciò che stai descrivendo. Se stessi raggiungendo il limite, allora non sarei in grado di farlo salire come sto descrivendo (con forze più grandi). –