Weiterlaufende Zeit in Spielen
- grinseengel
- Establishment
- Beiträge: 885
- Registriert: 29.03.2011, 13:47
- Echter Name: Andreas
Weiterlaufende Zeit in Spielen
Hallo,
ich hoffe mein Thema hört sich jetzt nicht komplett bescheuert an. Ich konnte das nicht besser beschreiben. Es geht mir um das Spielprinzip wie es z.B. bei Animal Crossing verwendet wird. Der Spieler baut während der tatsächlichen Laufzeit des Spiels z.B. ein Haus. Das benötigt 10 Stunden bis es fertig gebaut ist. Jetzt soll die Zeit "weiterlaufen" und wenn der Spieler z.B. fünf Stunden später erneut spielt sind die fünf Stunden vergangen und es sind dann schon die Hauswände gebaut worden. Nur das Dach fehlt noch und als Bauzeit für die Fertigstellung ist entsprechend nur noch die Differenz.
Ich denke der Ansatz wäre jeweils die Zeit zu speichern und bei erneuten Spielstart die Differenz zu ermitteln. Wäre das ein Ansatz oder habt ihr da eine andere Idee?
ich hoffe mein Thema hört sich jetzt nicht komplett bescheuert an. Ich konnte das nicht besser beschreiben. Es geht mir um das Spielprinzip wie es z.B. bei Animal Crossing verwendet wird. Der Spieler baut während der tatsächlichen Laufzeit des Spiels z.B. ein Haus. Das benötigt 10 Stunden bis es fertig gebaut ist. Jetzt soll die Zeit "weiterlaufen" und wenn der Spieler z.B. fünf Stunden später erneut spielt sind die fünf Stunden vergangen und es sind dann schon die Hauswände gebaut worden. Nur das Dach fehlt noch und als Bauzeit für die Fertigstellung ist entsprechend nur noch die Differenz.
Ich denke der Ansatz wäre jeweils die Zeit zu speichern und bei erneuten Spielstart die Differenz zu ermitteln. Wäre das ein Ansatz oder habt ihr da eine andere Idee?
Website: http://www.pchobbyspieleschmiede.de/
Discord: https://discord.gg/PHZFBptfxJ
Fertige Projekte: https://grinseengel.itch.io/
Discord: https://discord.gg/PHZFBptfxJ
Fertige Projekte: https://grinseengel.itch.io/
-
- Moderator
- Beiträge: 2138
- Registriert: 25.02.2009, 13:37
Re: Weiterlaufende Zeit in Spielen
Bei linearen Prozessen kannst du auch jeweils einen finish timestamp (für das Haus in deinem Beispiel) speichern, statt einer Dauer. Hat vor und nachteile. Wenn du eine echte Simulation laufen hast willst du wahrscheinlich Eulerschritte machen (https://en.wikipedia.org/wiki/Euler_method) dann wird es beliebig kompliziert je nachdem was du so vor hast.
Re: Weiterlaufende Zeit in Spielen
Bei Spielende oder einfach die aktuelle Zeit stoppen und bei Spielstart die neue Zeit abfragen und die Differenz berechnen.
Kann mir jetzt nicht vorstellen ob die Euler Methode in diesem Fall weiterhilft.
Kann mir jetzt nicht vorstellen ob die Euler Methode in diesem Fall weiterhilft.
- MEIN AKTELLES PROJEKT -> FirstStrike (PLAY THE DEMO) -> NEUER ENDBOSS -> schau dir das Video an
- WAS ICH SONST SO MACHEN -> Grafik und Design
- KUGELN FÜR ALLE -> BulletEmitter für Unity
- ICH MACH MAL SCHNELL EINE 3D ENGINE -> oyname 3DEngine
- grinseengel
- Establishment
- Beiträge: 885
- Registriert: 29.03.2011, 13:47
- Echter Name: Andreas
Re: Weiterlaufende Zeit in Spielen
Danke für den Tipp. Allerdings ist das für Vater`s einzigen Sohn etwas zu viel Mathematik. Bei mir hört es so etwas bei der Kurvendiskussion auf 😊😊Bei linearen Prozessen kannst du auch jeweils einen finish timestamp (für das Haus in deinem Beispiel) speichern, statt einer Dauer. Hat vor und nachteile. Wenn du eine echte Simulation laufen hast willst du wahrscheinlich Eulerschritte machen (https://en.wikipedia.org/wiki/Euler_method) dann wird es beliebig kompliziert je nachdem was du so vor hast.
Website: http://www.pchobbyspieleschmiede.de/
Discord: https://discord.gg/PHZFBptfxJ
Fertige Projekte: https://grinseengel.itch.io/
Discord: https://discord.gg/PHZFBptfxJ
Fertige Projekte: https://grinseengel.itch.io/
-
- Moderator
- Beiträge: 2138
- Registriert: 25.02.2009, 13:37
Re: Weiterlaufende Zeit in Spielen
Das ursprüngliche Beispiel waren Gebäude also bleiben wir da und unterstellen eine Wirtschaftssimulation. Gebäude 1 ist ein Baukran und macht dass allen anderen Gebäude 20% schneller fertig werden. Gebäude 2 ist eine Kohlemine und macht dass man pro Minute 100 Einheiten Kohle bekommt. Gebäude beginnen dann einen Effekt zu haben, wenn sie fertig sind. Beim Beenden des Spiels wäre der Baukran nach 20 Minuten fertig und die Kohlemine nach 30 Minuten. Wieviele Einheiten Kohle haben sich angesammelt, wenn die Spielerin nach einer Stunde wiederkommt?
Nun jedenfalls nicht naiv (60 Minuten - 30 Minuten Restbauzeit) * 100 Einheiten / Minute, denn das ignoriert das andere Gebäude.
Sondern richtig wäre (60 Minuten - (20 Minuten [Gebäude 1] + (30 Minuten - 20 Minuten) * 0.8 [Effekt von Gebäude 1 auf verbleibende Zeit von Gebäude 2]) * 100 Einheiten / Minute.
Das will man wahrscheinlich im Allgemeinen nicht analytisch lösen, sondern indem man die Zeit diskretisiert, gell?
Re: Weiterlaufende Zeit in Spielen
stimmt...so weit hatte ich nicht gedacht. Dafür eignet sich das natürlich sehr gut und man kann den Einfluss von unterschiedlichen Faktoren auf die Entwicklung im System berechnen...Alexander Kornrumpf hat geschrieben: ↑31.01.2024, 23:28 ...Das will man wahrscheinlich im Allgemeinen nicht analytisch lösen, sondern indem man die Zeit diskretisiert, gell?
Ich hatte da einen sehr Einfachen Ansatz im Kopf. Anfangen Gebäude zu bauen...am nächsten Tag PC hochfahren...Gebäude ist fertig, aber das u.U. ein Gebäude Einfluss auf ein anderes hat, dass habe ich in meine Überlegung nicht eingebunden...
Zuletzt geändert von gombolo am 01.02.2024, 12:21, insgesamt 1-mal geändert.
- MEIN AKTELLES PROJEKT -> FirstStrike (PLAY THE DEMO) -> NEUER ENDBOSS -> schau dir das Video an
- WAS ICH SONST SO MACHEN -> Grafik und Design
- KUGELN FÜR ALLE -> BulletEmitter für Unity
- ICH MACH MAL SCHNELL EINE 3D ENGINE -> oyname 3DEngine
- grinseengel
- Establishment
- Beiträge: 885
- Registriert: 29.03.2011, 13:47
- Echter Name: Andreas
Re: Weiterlaufende Zeit in Spielen
Da hast du Recht. Allerdings werde ich mit diesem Ansatz starten, damit mein Zeitscript erstmal fehlerfrei läuft. Dann schau ich mir mal deinen anderen Vorschlag an. Das ist schon deutlich komplexer.Nun jedenfalls nicht naiv (60 Minuten - 30 Minuten Restbauzeit) * 100 Einheiten / Minute, denn das ignoriert das andere Gebäude.
Ich glaube ich werde es erstmal einfacher gestalten. Z.B. ein Feld erstellen das 6 Stunden benötigt um Weizen zu erzeugen.
Website: http://www.pchobbyspieleschmiede.de/
Discord: https://discord.gg/PHZFBptfxJ
Fertige Projekte: https://grinseengel.itch.io/
Discord: https://discord.gg/PHZFBptfxJ
Fertige Projekte: https://grinseengel.itch.io/
- Schrompf
- Moderator
- Beiträge: 5041
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Weiterlaufende Zeit in Spielen
Die komplexe Lösung wäre, das ereignis-basiert zu coden. Du guckst unter allen gerade laufenden Prozessen nach, was als nächstes fertig wird. Alexander hat schön gezeigt, wie sich die Formeln verändern, wenn neue Effekte - wie der Baukran - hinzukommen. An dem Beispiel hast Du:
A) die Kohlemine wird nach 30min fertig
B) der Baukran wird nach 20min fertig und macht ab dann alle Bauvorhaben 20% schneller
C) die Kohleminie produziert 100 Einheiten / Minute Kohle.
D) die Spielerin loggt sich ein, 250min nach dem letzten Ausloggen
Du willst jetzt also alles aufholen bis zum Einloggen. Du sortierst die Liste nach dem Zeitpunkt. Da ist offensichtlich zuerst B) dran, dann A), dann erst C), und ganz am Ende D). Also kannst Du jetzt bis B) vorspulen und für die Zeit hast Du eine komplett feste Wirtschaft, die halt in den 20min tut, was sie tut.
Dann setzt Du B) um. Jetzt gibt's in Deiner Wirtschaft einen Baukran. Du sammelst erneut alle Ereignisse:
A) die Kohlemine wird nach (10 Restminuten * 0.8 == 8min) fertig
C) die Kohlemine produziert 100 E/min
D) die Spielerin loggt sich ein, 230min
Du sortierst wieder nach Eintrittszeitpunkt - offensichtlich ist A) das nächste. Du betreibst Deine Wirtschaft wieder für 8min und setzt dann A) um - es gibt jetzt ein zweites fertiges Gebäude, die Kohlemine.
C) ist jetzt kein wirkliches Ereignis, sondern ein Zustand - Deine Wirtschaft produziert insgesamt 100E/min Kohle. Das einzige Ereignis, was jetzt noch im betrachteten Zeitraum passiert, ist D) - das erneute Einloggen der Spielerin nach 222 Restminuten. Also lässt Du Deine Wirtschaft 222min lang tun, was sie tut - 100E/min Kohle produzieren. Ergibt 222min * 100E/min == 22200 Einheiten Kohle. Dazu passen sogar die Einheiten in der Formel.
Tadaaa. Kompletten Zeitraum Deiner Wirtschaft akkurat simuliert. Spielerin sieht jetzt z.B. ne Liste von News beim Einloggen:
und 22200 Kohle im Vorrat. Perfekt.
Die alternative Methode ist, einen kleinsten Zeitschritt zu bestimmen, zum Beispiel eine Minute. Und dann führst Du beim nächsten Einloggen einfach 250 Zeitschritte zu je einer Minute aus. Kann Dir bei kleinen Zeitschritten und großen Wirtschaften wirklich zu lange dauern - Spielerin loggt sich nach 4T mal wieder ein und wird von 5s hängender App begrüßt. Und Du kannst alle Prozesse nur in ganzen Zeitschritten ablaufen lassen. Mit genügend Baubeschleunigern wird zum Beispiel ein Mini-Bauprojekt - ein Weizenfeld z.B. - in 20s fertig. Wird's aber nicht, weil Du minimal ne Minute bestimmt hast. Aber geht halt auch und ist einfacher zu programmieren :-)
A) die Kohlemine wird nach 30min fertig
B) der Baukran wird nach 20min fertig und macht ab dann alle Bauvorhaben 20% schneller
C) die Kohleminie produziert 100 Einheiten / Minute Kohle.
D) die Spielerin loggt sich ein, 250min nach dem letzten Ausloggen
Du willst jetzt also alles aufholen bis zum Einloggen. Du sortierst die Liste nach dem Zeitpunkt. Da ist offensichtlich zuerst B) dran, dann A), dann erst C), und ganz am Ende D). Also kannst Du jetzt bis B) vorspulen und für die Zeit hast Du eine komplett feste Wirtschaft, die halt in den 20min tut, was sie tut.
Dann setzt Du B) um. Jetzt gibt's in Deiner Wirtschaft einen Baukran. Du sammelst erneut alle Ereignisse:
A) die Kohlemine wird nach (10 Restminuten * 0.8 == 8min) fertig
C) die Kohlemine produziert 100 E/min
D) die Spielerin loggt sich ein, 230min
Du sortierst wieder nach Eintrittszeitpunkt - offensichtlich ist A) das nächste. Du betreibst Deine Wirtschaft wieder für 8min und setzt dann A) um - es gibt jetzt ein zweites fertiges Gebäude, die Kohlemine.
C) ist jetzt kein wirkliches Ereignis, sondern ein Zustand - Deine Wirtschaft produziert insgesamt 100E/min Kohle. Das einzige Ereignis, was jetzt noch im betrachteten Zeitraum passiert, ist D) - das erneute Einloggen der Spielerin nach 222 Restminuten. Also lässt Du Deine Wirtschaft 222min lang tun, was sie tut - 100E/min Kohle produzieren. Ergibt 222min * 100E/min == 22200 Einheiten Kohle. Dazu passen sogar die Einheiten in der Formel.
Tadaaa. Kompletten Zeitraum Deiner Wirtschaft akkurat simuliert. Spielerin sieht jetzt z.B. ne Liste von News beim Einloggen:
Code: Alles auswählen
- Bauvorhaben fertiggestellt: Baukran (vor 3h50min)
- Bauvorhaben fertiggestellt: Kohlemine (vor 3h42min)
Die alternative Methode ist, einen kleinsten Zeitschritt zu bestimmen, zum Beispiel eine Minute. Und dann führst Du beim nächsten Einloggen einfach 250 Zeitschritte zu je einer Minute aus. Kann Dir bei kleinen Zeitschritten und großen Wirtschaften wirklich zu lange dauern - Spielerin loggt sich nach 4T mal wieder ein und wird von 5s hängender App begrüßt. Und Du kannst alle Prozesse nur in ganzen Zeitschritten ablaufen lassen. Mit genügend Baubeschleunigern wird zum Beispiel ein Mini-Bauprojekt - ein Weizenfeld z.B. - in 20s fertig. Wird's aber nicht, weil Du minimal ne Minute bestimmt hast. Aber geht halt auch und ist einfacher zu programmieren :-)
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
-
- Moderator
- Beiträge: 2138
- Registriert: 25.02.2009, 13:37
Re: Weiterlaufende Zeit in Spielen
Genau so wie Schrompf sagt!
- Chromanoid
- Moderator
- Beiträge: 4273
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Weiterlaufende Zeit in Spielen
Wenn man sich anschaut, wie ekelig das in Physik-Engines ohne Schrittverfahren wird, würde ich, glaube ich, immer auf ein Schrittverfahren setzen und im Zweifel lieber die Berechnung optimieren. Dann hat man bei den Spielregeln die meisten Freiheiten.
- Schrompf
- Moderator
- Beiträge: 5041
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Weiterlaufende Zeit in Spielen
Huch, wie kommst Du denn jetzt auf Physik? Das ist ein ziemlicher Sprung. Theoretisch könnte man wirklich auch ne Physikengine so implementieren: alle kommenden Kontakt- oder Kontaktabbruch-Ereignisse bestimmen, alle Entities bis zum ersten Ereignis vorspulen, Ereignis in den Gesamt-Zustand des Systems aufnehmen. In der Praxis wird das beliebig hässlich, schätze ich. Kann mir gut vorstellen, dass schon ne einzelne runterfallende Kiste, die nach Aufprall mit ner Ecke in den Boden gebohrt langsam umkippt, ein echt fieses Set aus Differentialgleichungen zweiter Ordnung ergibt. Und die daraus resultierende Bewegung wird dann echt schwer in das nächste Kontaktereignis umzurechnen sein. Dass bei dem Thema niemand ernsthaft ereignisbasiert arbeitet, glaube ich sofort.
Irgendne IdleGame-artige Mobile Free2Play Wirtschaftssim hingegen wird stressarm machbar sein.
Irgendne IdleGame-artige Mobile Free2Play Wirtschaftssim hingegen wird stressarm machbar sein.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- Chromanoid
- Moderator
- Beiträge: 4273
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Weiterlaufende Zeit in Spielen
Ich habe das auch mal im 2D-Raum rudimentär gemacht, nervt aber... :D
Kommt halt echt darauf an, was man da so treibt. Es geht ja schon damit los, wenn Arbeiter produziert werden, die irgendwo arbeiten und damit die Produktivität erhöhen. 1000 Arbeiter innerhalb 1 Stunde und dann noch irgendwelche anderen Ereignisse dieser Art, z.B. Rohstoffe werden irgendwo weiterverarbeitet, und schon hat man schwer zu verstehende gruselige Event-Kaskaden. Riecht für mich nach Overengineering, das über Events zu lösen. Am Ende hat man vielleicht häufiger als man denkt mehr Events als Schritte/Runden. Zumindest muss man sich immer ordentlich bei den Spielregeln Gedanken machen, was das bedeutet, wenn man das nicht rundenbasiert einbaut.
Kommt halt echt darauf an, was man da so treibt. Es geht ja schon damit los, wenn Arbeiter produziert werden, die irgendwo arbeiten und damit die Produktivität erhöhen. 1000 Arbeiter innerhalb 1 Stunde und dann noch irgendwelche anderen Ereignisse dieser Art, z.B. Rohstoffe werden irgendwo weiterverarbeitet, und schon hat man schwer zu verstehende gruselige Event-Kaskaden. Riecht für mich nach Overengineering, das über Events zu lösen. Am Ende hat man vielleicht häufiger als man denkt mehr Events als Schritte/Runden. Zumindest muss man sich immer ordentlich bei den Spielregeln Gedanken machen, was das bedeutet, wenn man das nicht rundenbasiert einbaut.
Re: Weiterlaufende Zeit in Spielen
Eine andere Alternative wäre noch das Spiel auf einem Server laufen zu lassen. Der rechnet dann einfach alles ganz normal in Echtzeit aus und man muss nichts anpassen, aber effektiv entwickelt man dann ein Online-Spiel, was auch nicht unbedingt einfach ist.
Zum Thema Physik Berechnung: Kann man überhaupt das Kollisionsproblem analytisch lösen für irgendetwas das komplizierter als Kugeln ist? Eigentlich alles was mir einfällt ist eigentlich Kräfte anwenden, dann auf Kollision prüfen und im positiven Fall einen Korrekturschritt machen, und das halt für jeden Zeitschritt. Man könnte maximal die Schrittweite der Simulation erhöhen für stellen an denen weniger los ist. Und dann gibt es ja auch Effekte von denen man schon weiß, dass sie nur numerisch gelöst werden können, etwa das Dreikörperproblem. Da ist eine Eventbasierte Behandlung (mit analytischen Schritten dazwischen) also nicht nur schwierig sondern prinzipiell ausgeschlossen.
Andererseits, und das ist glaube ich viel wichtiger: Was für eine Art Spiellogik will man denn haben? Das ganze mit "10 Stunden warten" klingt irgendwie wie diese alten Browser-Games, wo man halt immer wieder mal reingeklickt hat, 5 Minuten was gemanaged hat und dann am nächsten Tag zurück kommt. Wieso braucht man für sowas eine Spiellogik mit zig Events pro Minute? Man kann einfach, analog zu einem Brettspiel, sagen, dass halt alle 10 Minuten oder so ein Zeitschritt passiert. Waren werden produziert, Technologien fertig erforscht, Leute geboren - alles ist auf diesen Rhythmus angepasst. Das hat halt den Vorteil, dass auch der Spieler verstehen kann, was wann passiert. Wenn ich pro Stunde x Ressourcen bekomme, kann ich im Kopf ausrechnen, wann ich genug habe. Wenn sich der Wert pro Minute ändert und das Delta auch, dann kann man das vergessen. Eine simplere Spiellogik hilft also nicht nur dem Programmierer sondern auch dem Spieler.
Zum Thema Physik Berechnung: Kann man überhaupt das Kollisionsproblem analytisch lösen für irgendetwas das komplizierter als Kugeln ist? Eigentlich alles was mir einfällt ist eigentlich Kräfte anwenden, dann auf Kollision prüfen und im positiven Fall einen Korrekturschritt machen, und das halt für jeden Zeitschritt. Man könnte maximal die Schrittweite der Simulation erhöhen für stellen an denen weniger los ist. Und dann gibt es ja auch Effekte von denen man schon weiß, dass sie nur numerisch gelöst werden können, etwa das Dreikörperproblem. Da ist eine Eventbasierte Behandlung (mit analytischen Schritten dazwischen) also nicht nur schwierig sondern prinzipiell ausgeschlossen.
Andererseits, und das ist glaube ich viel wichtiger: Was für eine Art Spiellogik will man denn haben? Das ganze mit "10 Stunden warten" klingt irgendwie wie diese alten Browser-Games, wo man halt immer wieder mal reingeklickt hat, 5 Minuten was gemanaged hat und dann am nächsten Tag zurück kommt. Wieso braucht man für sowas eine Spiellogik mit zig Events pro Minute? Man kann einfach, analog zu einem Brettspiel, sagen, dass halt alle 10 Minuten oder so ein Zeitschritt passiert. Waren werden produziert, Technologien fertig erforscht, Leute geboren - alles ist auf diesen Rhythmus angepasst. Das hat halt den Vorteil, dass auch der Spieler verstehen kann, was wann passiert. Wenn ich pro Stunde x Ressourcen bekomme, kann ich im Kopf ausrechnen, wann ich genug habe. Wenn sich der Wert pro Minute ändert und das Delta auch, dann kann man das vergessen. Eine simplere Spiellogik hilft also nicht nur dem Programmierer sondern auch dem Spieler.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
- grinseengel
- Establishment
- Beiträge: 885
- Registriert: 29.03.2011, 13:47
- Echter Name: Andreas
Re: Weiterlaufende Zeit in Spielen
Interessantes Thema. Vielen Dank für die vielen Gedanken und Ideen zur Spielidee.
@Schrompf:
Vielen Dank für das kleine Rechenbeispiel. Das ist sehr gut nachvollziehbar und umsetzbar.
Serverseitig werde ich da nichts machen, da habe ich nicht genug Wissen für eine Umsetzung.
Mir schwebt da ein recht einfaches Prinzip im Kopf herum. Inspiriert wurde ich durch das App-Spiel TownShip. Da geht es im Prinzip um den Auf-und Ausbau einer kleinen Stadt. Man fängt mit einen kleinen Weizenfeld an. Dann wird Brot gebacken. Der Weizen muss dann in eine Mühle und wird zu Hühnerfutter. Das wird dann für die Eierproduktion benötigt...
Im Prinzip so wie eine Farmsimulation während der Laufzeit. Das eignet sich natürlich in erster Linie für solche Handyspiele mit In-App-Käufen. Ich möchte das aber einfach mal für ein kleines PC-Spiel übertragen und ausprobieren.
@Schrompf:
Vielen Dank für das kleine Rechenbeispiel. Das ist sehr gut nachvollziehbar und umsetzbar.
Serverseitig werde ich da nichts machen, da habe ich nicht genug Wissen für eine Umsetzung.
Mir schwebt da ein recht einfaches Prinzip im Kopf herum. Inspiriert wurde ich durch das App-Spiel TownShip. Da geht es im Prinzip um den Auf-und Ausbau einer kleinen Stadt. Man fängt mit einen kleinen Weizenfeld an. Dann wird Brot gebacken. Der Weizen muss dann in eine Mühle und wird zu Hühnerfutter. Das wird dann für die Eierproduktion benötigt...
Im Prinzip so wie eine Farmsimulation während der Laufzeit. Das eignet sich natürlich in erster Linie für solche Handyspiele mit In-App-Käufen. Ich möchte das aber einfach mal für ein kleines PC-Spiel übertragen und ausprobieren.
Website: http://www.pchobbyspieleschmiede.de/
Discord: https://discord.gg/PHZFBptfxJ
Fertige Projekte: https://grinseengel.itch.io/
Discord: https://discord.gg/PHZFBptfxJ
Fertige Projekte: https://grinseengel.itch.io/
Re: Weiterlaufende Zeit in Spielen
finde ich auch. Nicht nur für die Spieleentwicklung. Auch zum Simulieren von Produktionslinien. Was passiert wenn man bestimmte Faktoren verändert...wie verhalten sich die Produktionszahlen usw...was passiert wenn man einen "Flaschenhals" wegoptimiert...wohin wird sich die Engstelle verschieben...grinseengel hat geschrieben: ↑01.02.2024, 15:56 Interessantes Thema. Vielen Dank für die vielen Gedanken und Ideen zur Spielidee.
- MEIN AKTELLES PROJEKT -> FirstStrike (PLAY THE DEMO) -> NEUER ENDBOSS -> schau dir das Video an
- WAS ICH SONST SO MACHEN -> Grafik und Design
- KUGELN FÜR ALLE -> BulletEmitter für Unity
- ICH MACH MAL SCHNELL EINE 3D ENGINE -> oyname 3DEngine
-
- Beiträge: 19
- Registriert: 30.06.2015, 19:03
Re: Weiterlaufende Zeit in Spielen
Ich weiß nicht, ob das jetzt zu weit vom Thema wegführt:
Einzelne Effekte können ja auch miteinander interagieren. Zum Beispiel habe ich eine Kohlemine, die produziert Kohle. Dann habe ich ein Kohlekraftwerk, das steigert die Effektivität jeder Mine.
Ich will jetzt eine Stunde simulieren:
1. Kohlemine stellt 2 Einheiten Kohle her, das schafft sie nach 10 Minuten.
2. Kraftwerk verbraucht 2 Einheiten Kohle und stellt dafür 10 Einheiten Strom bereit für die nächsten 10 Minuten.
3. Ab jetzt verbraucht die Kohlemine 1 Einheit Strom und stellt dafür in 10 Minuten 4 Einheiten Kohle her.
Im Beispiel gibt es sicher eine einfache Lösung, dann einfach 10 Minuten zu simulieren und man kann auch dem Kohlekraftwerk ein Lager geben, usw.
Ich finde aber interessanter, dass ein Gebäude Einfluss auf die Eventlaufzeit eines anderen Gebäudes hat, nämlich das Kraftwerk auf die Kohlemine.
Mein naiver Ansatz wäre dann einfach in den kleinsten Schritten zu simulieren, in dem Fall wohl fünf Minuten für eine Einheit Kohle. Dann kommt die in ein Lager. Dann wieder fünf Minuten, jetzt sind zwei Einheiten Kohle im Lager und nun wird ein Event ausgelöst, das das Kohlekraftwerk am Lager registriert hat, nämlich sobald zwei Einheiten vorhanden sind.
Einzelne Effekte können ja auch miteinander interagieren. Zum Beispiel habe ich eine Kohlemine, die produziert Kohle. Dann habe ich ein Kohlekraftwerk, das steigert die Effektivität jeder Mine.
Ich will jetzt eine Stunde simulieren:
1. Kohlemine stellt 2 Einheiten Kohle her, das schafft sie nach 10 Minuten.
2. Kraftwerk verbraucht 2 Einheiten Kohle und stellt dafür 10 Einheiten Strom bereit für die nächsten 10 Minuten.
3. Ab jetzt verbraucht die Kohlemine 1 Einheit Strom und stellt dafür in 10 Minuten 4 Einheiten Kohle her.
Im Beispiel gibt es sicher eine einfache Lösung, dann einfach 10 Minuten zu simulieren und man kann auch dem Kohlekraftwerk ein Lager geben, usw.
Ich finde aber interessanter, dass ein Gebäude Einfluss auf die Eventlaufzeit eines anderen Gebäudes hat, nämlich das Kraftwerk auf die Kohlemine.
Mein naiver Ansatz wäre dann einfach in den kleinsten Schritten zu simulieren, in dem Fall wohl fünf Minuten für eine Einheit Kohle. Dann kommt die in ein Lager. Dann wieder fünf Minuten, jetzt sind zwei Einheiten Kohle im Lager und nun wird ein Event ausgelöst, das das Kohlekraftwerk am Lager registriert hat, nämlich sobald zwei Einheiten vorhanden sind.
Re: Weiterlaufende Zeit in Spielen
Ich finde das Spielprinzip schwierig, ehrlich gesagt.
Wenn es ein Online Spiel ist, kann der Server das berechnen, das wäre dann leicht.
Wenn es kein Online Spiel ist, muss die Zeit dann weiterlaufen, wenn der PC aus ist?
- Wenn nicht, dann kann man ja einfach den Zustand speichern
- Wenn doch ist das Spielprinzip nervig, warten für nix. Ich würde dann meine System-Uhr vorstellen, weils mir sonst zu blöd wäre...
Aber: man könnte im Spiel eine Beschleunigung/"Vorspulen" zum nächsten Event (Gebäude fertiggestellt, o.ä.) machen. Dann wärs wieder ok.
(Master Of Orion lässt grüßen ;-)
Zur Simulation selbst, das würde ich tatsächlich einfach in Schritten machen.
Und wenn halt ein paar Tage vergangen sind, müssen die Schritte halt nachgeholt/nachberechnet werden.
Am einfachsten definiert man gleichförmige Schritte, in denen die Simulation läuft. Wenn man relativ lange warten muss ist es auch egal, ob Events ein paar Sekunden früher oder später passieren.
Wenn es ein Online Spiel ist, kann der Server das berechnen, das wäre dann leicht.
Wenn es kein Online Spiel ist, muss die Zeit dann weiterlaufen, wenn der PC aus ist?
- Wenn nicht, dann kann man ja einfach den Zustand speichern
- Wenn doch ist das Spielprinzip nervig, warten für nix. Ich würde dann meine System-Uhr vorstellen, weils mir sonst zu blöd wäre...
Aber: man könnte im Spiel eine Beschleunigung/"Vorspulen" zum nächsten Event (Gebäude fertiggestellt, o.ä.) machen. Dann wärs wieder ok.
(Master Of Orion lässt grüßen ;-)
Zur Simulation selbst, das würde ich tatsächlich einfach in Schritten machen.
Und wenn halt ein paar Tage vergangen sind, müssen die Schritte halt nachgeholt/nachberechnet werden.
Am einfachsten definiert man gleichförmige Schritte, in denen die Simulation läuft. Wenn man relativ lange warten muss ist es auch egal, ob Events ein paar Sekunden früher oder später passieren.
- starcow
- Establishment
- Beiträge: 560
- Registriert: 23.04.2003, 17:42
- Echter Name: Mischa Schaub
- Kontaktdaten:
Re: Weiterlaufende Zeit in Spielen
Sehr spannende Diskussion hier. Ich hatte mal zu einem etwas anderen Setting (eine "tamagotchi-artige" Kreatur, die das Zeitliche segnen sollte, falls sich der Spieler nicht kümmern sollte) ähnliche Überlegungen angestellt.
Edmund Weitz:
https://youtu.be/IExxH1YGM3Y?si=LtAh04-jlwYjwiQ8&t=3656
Kleines Detail: Tatsächlich gibt es für das Dreikörperproblem und Mehrkörperproblem eine analytische Lösung mittels konvergierenden Potenzreihen. Diese sind jedoch in der Praxis nicht wirklich brauchbar, da zu lang.Jonathan hat geschrieben: ↑01.02.2024, 15:08 Und dann gibt es ja auch Effekte von denen man schon weiß, dass sie nur numerisch gelöst werden können, etwa das Dreikörperproblem. Da ist eine Eventbasierte Behandlung (mit analytischen Schritten dazwischen) also nicht nur schwierig sondern prinzipiell ausgeschlossen.
Edmund Weitz:
https://youtu.be/IExxH1YGM3Y?si=LtAh04-jlwYjwiQ8&t=3656
Zuletzt geändert von starcow am 04.02.2024, 16:07, insgesamt 1-mal geändert.
Re: Weiterlaufende Zeit in Spielen
Ach interessant. Wobei: In dem Video wurden die Reihen jetzt nicht gezeigt, aber wenn es einfach irgendeine Potenzreihe ist, die nach unendlich vielen Schritten gegen die Lösung konvergiert, dann würde ich das jetzt nicht analytisch nennen. Vielleicht ist das zwar technisch richtig ("Unter einer analytischen Lösung versteht man eine allgemeine Umformung einer Gleichung, sodass die gesuchte Variable alleine auf einer Gleichungsseite steht") aber was man ja umgangssprachlich (jaja, ich weiß, echte Mathematiker werden an dieser Stelle zornig^^) unter analytischer Lösung versteht, ist eine "einfache" Formel, mit der man das Endergebnis direkt berechnen kann. Letztendlich ist es ja für die Lösung egal, ob man eine Differenzialgleichung durch Iterationsschritte über die Zeit löst, oder eine Potenzreihe durch aufaddieren von sehr vielen Summanden annähert - in beiden Fällen macht man sehr viele Berechnungsschritte die man aufaddieren muss. Und beides sind keine effizienten / einfachen Lösungen. Aber gut, du hast ja auch schon gesagt, dass man die für die Praxis vergessen kann.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
-
- Beiträge: 15
- Registriert: 26.02.2002, 10:34
- Kontaktdaten:
Re: Weiterlaufende Zeit in Spielen
Da hier ja jetzt sehr viel in die Richtung diskutiert wurde, wie man die gegenseitige Beeinflussung von gerade im Bau befindlichen Spielobjekten berechnen könnte, möchte ich einmal in Frage stellen, ob das denn überhaupt sein muss. Denn zumindest aus dem ursprünglichen Post kann ich das nicht als Anforderung rauslesen (wobei ich aber auch Animal Crossing jetzt nicht kenne).
Mir fällt bei der Fragestellung nämlich sofort Royal Revolt 2 ein, was ich längere Zeit gespielt hatte. Dort muss jeder Bau/jedes Upgrade/jedes Einsammeln von Ressourcen bei Fertigstellung erst durch Antippen des Objekts final bestätigt werden, bevor es Einfluss auf andere Spielobjekte hat. Beispiel: Der Spieler baut eine neue Farm, das wird 10 Stunden dauern. Öffnet er also nach 5 Stunden erneut das Spiel, sieht er einen Baufortschritt von 50%. Öffnet er aber erst nach 20 Stunden erneut das Spiel, sieht er, dass die Farm jetzt fertig ist und "aktiviert" werden kann - mit einem Antippen kann er das dann tun. Erst ab diesem Zeitpunkt beginnt die Farm dann auch, Ressourcen zu produzieren. Es geht weiter: Ab jetzt produzierte Ressourcen der Farm verbleiben erstmal in dieser, bevor der Spieler sie wieder antippt und die Ressourcen damit einsammelt. Erst damit stehen sie der globalen Spielerwelt/anderen Objekten zur Verfügung. Gleiches Prinzip z.B. für Verteidigungsanlagen: Der Spieler startet ein Upgrade der Türme, das 5 Stunden dauert, und schließt dann das Spiel. Nach 7 Stunden wird er von einem anderen Spieler angegriffen, er selbst hat das Spiel aber zu diesem Zeitpunkt noch nicht wieder geöffnet und konnte somit das fertige Upgrade auch noch nicht aktivieren. Die Verteidigung gegen den Angriff des anderen Spielers findet daher noch mit dem alten Verteidigungswert der Türme statt, auch wenn das Upgrade schon fertiggestellt wurde - aber es wurde halt noch nicht vom Spieler aktiviert.
Keine Ahnung, ob diese Zeitmechanik für dich prinzipiell eine Option wäre. Aber einerseits würde es deine Berechnungen sehr vereinfachen. Da sich Entwicklungen/Ressourcenproduktion nicht gegenseitig beeinflussen, kannst du nach erneutem Öffnen des Spiels den neuen Zustand jedes Objekts einfach linear aus dem alten bekannten Zustand und der seitdem vergangenen Zeit berechnen. Ereignisse mit globalen Auswirkungen (= beeinflussen andere Objekte; z.B. Fertigstellung eines Gebäudes oder Einsammeln von produzierten Ressourcen, Ausgeben von verfügbaren Ressourcen zum Bau neuer Objekte) müssen immer vom Spieler aktiv durch Antippen initiiert werden. Damit hast du auch dafür immer einen komplett bekannten Spielstand, auf den du jetzt genau eine definierte Aktion anwendest und der sich dann jetzt sofort diskret ändert.
Technisch lösen würdest du das über Zeitstempel. Beim Starten einer Aktion speicherst du dir Zustand + aktuellen Zeitstempel und kannst dann später mit dem neuen Zeitstempel die vergangene Zeit berechnen und damit den Fortschritt der Aktion. Wenn du das serverbasiert machst, ist das kein Problem. Wenn du keinen Server willst, aber zumindest eine Internetverbindung voraussetzt, könntest du dir bei jedem Spielstart den UTC-Zeitstempel von einem beliebigen Zeitserver holen. Wenn du das auch nicht möchtest, musst du dich auf die lokale Zeit des ausführenden PCs verlassen. Da solltest du dann zumindest einen Check beim Spielstart einbauen, dass die aktuelle Systemzeit später ist als der Zeitstempel des letzten gespeicherten Spielzustands.
Und auf der anderen Seite hat das natürlich auch Auswirkungen auf das Engagement des Spielers. Üblicherweise wählt man als Entwickler diese langen Bauzeiten ja, um den Spieler dazu zu bringen, das Spiel möglichst oft zu öffnen und damit zu interagieren. Lässt du aber Objekte und deren Fortschritt auch im Hintergrund miteinander interagieren, könnte der Spieler ja einfach ganz viele Aktionen starten, dann ne Woche in Urlaub fahren, danach das Spiel wieder starten und er wäre reich und unbesiegbar. Mit der von mir beschriebenen Berechnungsmethode haben jedoch die Spieler größeren Fortschritt, die das Spiel oft und regelmäßig öffnen.
Mir fällt bei der Fragestellung nämlich sofort Royal Revolt 2 ein, was ich längere Zeit gespielt hatte. Dort muss jeder Bau/jedes Upgrade/jedes Einsammeln von Ressourcen bei Fertigstellung erst durch Antippen des Objekts final bestätigt werden, bevor es Einfluss auf andere Spielobjekte hat. Beispiel: Der Spieler baut eine neue Farm, das wird 10 Stunden dauern. Öffnet er also nach 5 Stunden erneut das Spiel, sieht er einen Baufortschritt von 50%. Öffnet er aber erst nach 20 Stunden erneut das Spiel, sieht er, dass die Farm jetzt fertig ist und "aktiviert" werden kann - mit einem Antippen kann er das dann tun. Erst ab diesem Zeitpunkt beginnt die Farm dann auch, Ressourcen zu produzieren. Es geht weiter: Ab jetzt produzierte Ressourcen der Farm verbleiben erstmal in dieser, bevor der Spieler sie wieder antippt und die Ressourcen damit einsammelt. Erst damit stehen sie der globalen Spielerwelt/anderen Objekten zur Verfügung. Gleiches Prinzip z.B. für Verteidigungsanlagen: Der Spieler startet ein Upgrade der Türme, das 5 Stunden dauert, und schließt dann das Spiel. Nach 7 Stunden wird er von einem anderen Spieler angegriffen, er selbst hat das Spiel aber zu diesem Zeitpunkt noch nicht wieder geöffnet und konnte somit das fertige Upgrade auch noch nicht aktivieren. Die Verteidigung gegen den Angriff des anderen Spielers findet daher noch mit dem alten Verteidigungswert der Türme statt, auch wenn das Upgrade schon fertiggestellt wurde - aber es wurde halt noch nicht vom Spieler aktiviert.
Keine Ahnung, ob diese Zeitmechanik für dich prinzipiell eine Option wäre. Aber einerseits würde es deine Berechnungen sehr vereinfachen. Da sich Entwicklungen/Ressourcenproduktion nicht gegenseitig beeinflussen, kannst du nach erneutem Öffnen des Spiels den neuen Zustand jedes Objekts einfach linear aus dem alten bekannten Zustand und der seitdem vergangenen Zeit berechnen. Ereignisse mit globalen Auswirkungen (= beeinflussen andere Objekte; z.B. Fertigstellung eines Gebäudes oder Einsammeln von produzierten Ressourcen, Ausgeben von verfügbaren Ressourcen zum Bau neuer Objekte) müssen immer vom Spieler aktiv durch Antippen initiiert werden. Damit hast du auch dafür immer einen komplett bekannten Spielstand, auf den du jetzt genau eine definierte Aktion anwendest und der sich dann jetzt sofort diskret ändert.
Technisch lösen würdest du das über Zeitstempel. Beim Starten einer Aktion speicherst du dir Zustand + aktuellen Zeitstempel und kannst dann später mit dem neuen Zeitstempel die vergangene Zeit berechnen und damit den Fortschritt der Aktion. Wenn du das serverbasiert machst, ist das kein Problem. Wenn du keinen Server willst, aber zumindest eine Internetverbindung voraussetzt, könntest du dir bei jedem Spielstart den UTC-Zeitstempel von einem beliebigen Zeitserver holen. Wenn du das auch nicht möchtest, musst du dich auf die lokale Zeit des ausführenden PCs verlassen. Da solltest du dann zumindest einen Check beim Spielstart einbauen, dass die aktuelle Systemzeit später ist als der Zeitstempel des letzten gespeicherten Spielzustands.
Und auf der anderen Seite hat das natürlich auch Auswirkungen auf das Engagement des Spielers. Üblicherweise wählt man als Entwickler diese langen Bauzeiten ja, um den Spieler dazu zu bringen, das Spiel möglichst oft zu öffnen und damit zu interagieren. Lässt du aber Objekte und deren Fortschritt auch im Hintergrund miteinander interagieren, könnte der Spieler ja einfach ganz viele Aktionen starten, dann ne Woche in Urlaub fahren, danach das Spiel wieder starten und er wäre reich und unbesiegbar. Mit der von mir beschriebenen Berechnungsmethode haben jedoch die Spieler größeren Fortschritt, die das Spiel oft und regelmäßig öffnen.
-
- Moderator
- Beiträge: 2138
- Registriert: 25.02.2009, 13:37
Re: Weiterlaufende Zeit in Spielen
Wer perspektivisch interessiert ist, das beruflich mit einem Spiel zu machen, das tatsächlich Geld verdient, möge mir eine PN schreiben.
Wer sehen will, wie das Spielprinzip ohne das Monetarisierungsmodell trotzdem funktionieren kann, dem empfehle ich https://store.steampowered.com/app/2207 ... Town_Idle/
Wer sehen will, wie das Spielprinzip ohne das Monetarisierungsmodell trotzdem funktionieren kann, dem empfehle ich https://store.steampowered.com/app/2207 ... Town_Idle/