Quando dovrei usare un motore fisico? [chiuso]


12

Da quando ho scoperto Box2D , lo sto usando per qualsiasi tipo di applicazione simile a un gioco che provo a scrivere, da prototipi molto piccoli o piccoli programmi per testare qualcosa, a progetti reali.

Grazie ad esso è terribilmente facile gestire qualsiasi cosa, dalle collisioni, alla fisica reale.

A volte, però, ho qualche dubbio al riguardo: se devo solo gestire cerchi o AABB e non ho bisogno di strumenti fisici avanzati (articolazioni o cose del genere), penso che un motore fisico potrebbe aggiungere una sorta di grande, sovraccarico non necessario.

Per riassumere la mia domanda: useresti Box2D (o altri motori fisici) in un gioco in cui la fisica è davvero semplice (come Super Mario, diciamo)? E, in caso contrario, perché?


2
Fai ciò che ti sembra giusto. Pensi che il tuo gioco abbia bisogno di un motore fisico? Pensi che Mario trarrebbe beneficio da Box2D? Il nuovissimo Mario ha sicuramente una bella atmosfera con una bella fisica, ma non sembra nulla di simile a quello che ho visto costruito in Box2D.
Jeff,

@Jeff: dipende dalla domanda "Quando dovrei usare Box2D?" o "Quando dovrei usare un motore fisico?". Il nuovo Mario contiene sicuramente un motore fisico.

1
@Joe Wreschnig: Sì, ma c'è mai un caso in cui un motore fisico non viene utilizzato? Solo il tempo che mi viene in mente sarebbe un'avventura testuale, oppure punta e clicca. Immagino che dipenda da quanto generale desideri definire la tua definizione di motore fisico
Jeff

@Jeff: Pochi giochi puzzle (non fisici) ne hanno bisogno, ad esempio Tetris, Bejeweled. Nei giochi d'azione, potrei sostenere che la maggior parte degli shmup 2D non beneficiano di un motore fisico, poiché in genere hanno solo bisogno di controlli di sovrapposizione AABB / cerchio, nessuna risposta alla collisione, percorsi di movimento assolutamente fissi e velocità costante. I platform, tuttavia, sono tutti incentrati sulla fisica.

Risposte:


8

Se la memoria, lo spazio su disco, lo sforzo di sviluppo o il tempo del processore utilizzati per Box2D sono eccessivi per i tuoi scopi, non utilizzarli. Altrimenti, non c'è motivo di evitarlo se lo trovi utile.


2
Questo è tutto. Se ti semplifica la vita e non ti blocca dalle piattaforme che desideri, è una vittoria, anche se non ne usi parti.

1
O, in altre parole, "L'unico motivo per reinventare la ruota è imparare a reinventare la ruota".
Exilyth,

4

Qualcosa di semplice come Super Mario no, in quanto non ha molta fisica. (Mario non influisce sulla fisica di altri oggetti con i suoi salti)

se stai usando la fisica nel senso di più oggetti (più di uno) usando la fisica per influenzare il risultato di altri oggetti, allora userei un motore.


D'altra parte, Mario ha un momento, un'accelerazione, una dimensione variabile e una collisione direzionale, tutto ciò che si ottiene "gratuitamente" con un motore fisico e non sono solo semplici controlli di sovrapposizione di delimitazione.

Sono d'accordo - penso che la maggior parte delle volte un motore fisico ti dia molte cose che sarebbe un po 'una perdita di tempo per implementarti.
Christopher Horenstein,

3
Vero è sempre meglio non inventare la ruota, trovo solo che se voglio solo una ruota, non ho intenzione di prendere un progetto per un'auto. Inoltre, saprai di più sul tuo gioco nel suo insieme e sarà più facile alterare / cambiare la fisica.
Spooks

1
È un'analogia davvero orribile. Questo è più simile, vuoi una ruota e assi e forse un piantone dello sterzo e un motore ma forse non il cruscotto o gli alzacristalli elettrici.

3
chi non vorrebbe Windows Power?
Spooks

2

La mia risposta è sì, usa assolutamente un motore fisico come Box2D per cose semplici, perché non dovresti dedicare tempo di sviluppo non necessario all'implementazione di alcune delle funzionalità che ottieni rapidamente da un motore fisico. Ad esempio, definisci un corpo statico e rilascia un corpo dinamico su di esso, quindi applica la forza al tuo corpo dinamico per un input direzionale e avrai un platform in pochi minuti. Non penso che un motore aggiunga un sovraccarico sufficiente per non valerne la pena.


3
tuttavia, si potrebbe dire che capire come implementare e utilizzare Box2D richiederebbe più tempo per creare una fisica semplice. (anche se immagino che questo dipenda dall'estensione dell'uso della fisica)
Spooks

1
@Spooks: non riesco a immaginare nulla di "più semplice" di Box2D che sia ancora utile.

Sono pienamente d'accordo con Joe qui; non c'è proprio un semplice rimpiazzo per l'utilità che deriva dall'utilizzo di Box2D. Non riesco a immaginare di codificare qualcosa che soddisferà i propri bisogni più velocemente di imparare a creare alcuni apparecchi e definire la gravità con Box2D.
Christopher Horenstein,

1

Se la "fisica" in un gioco è semplice, non è necessario importare un motore fisico.

Uso vagamente il termine fisica poiché esiste una differenza tra modellare la fisica e simulare i phyisc. Una cosa molto importante da differenziare.

Ad esempio, in Mario Bros. quando corri e ti fermi scivolerai un po '. Pensa a come potresti implementarlo.

Puoi modellarlo definendo tutte le variabili necessarie: ad es. massa, gravità, coefficiente di attrito, spinta, ecc. e quindi calcolo della nuova velocità, accelerazione, ecc.

ma ne vale la pena? Puoi simulare lo stesso effetto diminuendo la velocità dei giocatori mentre non si muovono ...

Qualcosa di simile a:

if( pressing movement key ) { 
 speed = 5; 
} else { 
 if(speed) speed--; // slide!
} 

La differenza è che uno è la fisica, l'altro no. Ci sono pro e contro per entrambi. Ma come regola generale per i giochi semplici è molto più facile falsificarlo.


1
Questo tipo di fisica è disgustosa. Se hai intenzione di fingere, potrebbe anche farlo sembrare bello. attrito = .9 o un numero inferiore a 1. speedX * = attrito; speedY * = attrito;
AttackingHobo

2
Certamente, alla fine del progetto si trasforma in "if (premendo il tasto movimento e non muovendosi e sul ghiaccio e non sott'acqua e hai questo speciale power-up e non stai guidando in uno stivale e ...)".

@AttackingHobo: il punto del post non riguarda la creazione di un bel algoritmo scorrevole .. È illustrare la differenza tra una simulazione e un modello.
aaronfarr,

@Joe: Queste sono solo modifiche alla tua variabile di attrito .. forse tu e @AttackingHobo dovreste chattare: P Con un motore fisico devi definire le proprietà di ogni oggetto nel gioco. Il mio punto è che collegare un motore fisico per giochi semplici non dovrebbe essere automatico. È situazionale.
aaronfarr,

1
@aaronfarr: non c'è differenza tra una simulazione e un modello; per questi scopi sono sinonimi. Tutto quello che hai mostrato è che una parte isolata di un modello / simulazione giocattolo è meno codice dell'intero Box2D.

0

Devi decidere in base alla situazione

Professionisti che utilizzano il tuo motore personalizzato

  • Software sotto controllo (nessuna modifica dovuta alla nuova versione)
  • Adatto per il tuo gioco (solo le funzionalità di cui hai bisogno per il tuo gioco, nel modo in cui ne hai bisogno)
  • Flessibilità (qualsiasi dinamica folle che desideri può essere codificata, qualsiasi funzione futura non si baserebbe sul motore)
  • Esperienza di apprendimento (forse un giorno devi migliorare un motore e devi costruirne uno)
  • Meno studio e programmazione per funzioni semplici (a volte per fare qualcosa con un motore potrebbe essere necessario comprendere a fondo la sua struttura .. e potrebbe non essere degno)
  • Prestazioni più elevate per funzionalità semplici (per funzionalità specifiche semplici è possibile ottenere prestazioni più elevate rispetto a un motore abbastanza generico)
  • Meno memoria (l'oggetto e il codice potrebbero richiedere molto meno spazio e memoria quando vengono utilizzate solo le funzionalità necessarie)

Pro del motore fisico standard:

  • Può adattarsi al nuovo hardware e al nuovo sistema operativo senza troppi sforzi
  • Minori sforzi di studio e programmazione per funzionalità complesse
  • Prestazioni più elevate per funzionalità complesse
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.