mmofacts.com

RTS background Berechnungen

gepostet vor 12 Jahre, 5 Monate von Yuen

Hallo,

ich arbeite derzeit an einem auf AS3 basiertem Strategiespiel.

Im Backend läuft ein selbst geschriebener Server in Java der mit einer MySQL Datenbank kommuniziert.

Für die Kommunikation zwischen Spiel und Server verwende ich ein eigenes binäres Protokoll.

Soweit läuft alles auch reibungslos, doch wie regel ich das mit den Berechnungen für Ressourcen und Gebäude im Backend ?

Bisher funktioniert das ganze so:

In der Datenbank gibt es eine Spalte "lastUpdate", diese repräsentiert das letzte Auslesen der Ressourcen.

Beim einloggen berechnet mein Server die Stunden, die zwischen jetzt und dem "lastUpdate" liegen.

In einer zweiten Tabelle, für die Gebäudetypen, sind die Spalten "product" und "productHour" enthalten, die jeweils die zu produzierende Ressource und ihre Anzahl pro Stunde wiedergeben.

Mein Server durchläuft nun in einer Schleife alle Gebäudetypen, liest aus einer dritten Tabelle die Anzahl der Gebäude, des jeweiligen Gebäudetyp's und multipliziert diese mit "productHour" und das Produkt daraus wird mit der Anzahl der Stunden die zwischen dem einloggen und "lastUpdate" liegen multipliziert.

Nachdem die Ressourcen aktualisiert wurden, wird der Verbrauch berechnet.

Derzeit verbrauchen nur Bürger Nahrung, dazu subtrahiere ich die vorhandene Nahrung mit der Anzahl meiner Bürger, multipliziert mit den Differenzstunden.

Ein Gedanke der mir gekommen war, war die Berechnung auf den SQL-Server abzuwälzen. Auf dem SQL-Server ein Event starten dass alle 60 Minuten die Resourcen aktualisiert.

Ich würde nun gerne wissen wie andere Browsergames dieses Problem gelöst haben, da gibt es bestimmt elegantere Wege.

Mit freundlichen Grüßen

Yuen

gepostet vor 12 Jahre, 3 Monate von Phoscur

Ich bin ein Fan Lösung "berechne bei Bedarf", allgemein is das Problem Resourcenberechung nicht so trivial wenn man zB. überlegt, was passieren soll, wenn eine Resource ausgeht (bei dir die Nahrung).

Wenn du das umgehen willst musst du alles in einem Interval aktualisieren "Tick". Je kürzer dann dein Tick, desto mehr Arbeit für den Server.

Auch wenn ich schon mal sowas in MySQL Stored Procedures umgesetzt habe (glaube ich hier sogar mal zur Durchsicht gepostet zu haben), auch mit Energie (auch so eine nicht so triviale Resource..)!

Werde das aber wohl nie verwenden können, finde es mittlerweile keine gute Idee mehr die Datenbank, die sowieso schnell zum Flaschenhals wird wenn man hochskaliert, unnötig extra zu belasten. Zudem verwende ich derzeit keine relationale Datenbank mehr..

Auf diese Diskussion antworten