Page 1 of 1

Luft tryk mellem rum i et rumspil

Posted: 12 Aug 2016, 22:11
by DrZarqawi
Hej :)

Jeg sidder og roder lidt med et Rumbaseret tycoon-spil i unity og jeg tænker at som en del af det skal Oxygen styring være en faktor.

Men jeg kan simpelthen ikke gennemskue hvordan jeg skal simulere Lufttryk og Volume mellem rummene jeg laver.
Image
I mit prototype projekt har jeg en "Oxygene-provider" (den grønne) i midten og rundt om kan jeg så bygge korridorer (de hvide).
Jeg vil finde en måde at udregne luft trykket for hvert enkelt rum og sende luft frem og tilbage gennem rumstationen baseret på hvor lufttrykket er højest eller lavest.

mit forslag ligenu er en udregning for hvert rum i stil med:

Code: Select all

Pressure = output - Oxygene Level / intake
Men problemet med det er at for at udregne output og intake skal jeg kende pressure :/

Jeg har siddet og stirret mig blind de sidste to dage og har angrebet fra alle mulige vinkler, men kan bare ikke gennemskue det.

Så jeg håber virkelig at der er nogen herinde der kan skubbe mig i den rigtige retning :)

Re: Luft tryk mellem rum i et rumspil

Posted: 16 Aug 2016, 08:37
by Instawin
Hmm en lidt kompleks problemstilling lyder det til, som er lidt svær at overskue alene på baggrund af beskrivelsen?

Hvad er f.eks. formålet med at luften kan komme frem og tilbage? Skal lufttrykket jævnes ud rummene imellem, eller skal der være et bestemt tryk på et bestemt sted? Hvilke mekanismer har spilleren at operere med, og hvordan styres det?
Er der nogle grænser for hvor lidt og hvor meget lufttryk der kan være? Kan der f.eks. være over- eller undertryk, og hvad skal der i givet fald så ske?

Tilgang og afgang af luft, er den liniær eller stigende/faldende?

Jeg har ikke løsningen, men det var nogle af de spørgsmål, der lige hobede sig op hos mig, da jeg læste din post?

Re: Luft tryk mellem rum i et rumspil

Posted: 18 Aug 2016, 16:38
by Henrik LSP
Du kunne måske prøve noget i retning af nedenstående med en funktion der kaldes en gang per frame for hvert rum: (pseudo kode)

Code: Select all

for each Room r in getAdjacentRooms()
{
 if pressure < r.pressure
 {
  flow = flow_per_second * seconds_per_frame
  if flow > (r.pressure - pressure)/2
  {
   flow = (r.pressure - pressure)/2 
  }
  pressure += flow
  r.pressure -= flow
 } 
}