Wieviele Objekte gleichzeitig sind sinnvoll?

humpink

Mitglied
Hallo,

ich möchte mich nach Jahren von Java-Abstinenz mal wieder in Java einarbeiten, und damit das ganze nicht so trocken wird möchte ich gerne ein simples (Echtzeit) Strategiespiel programmieren. Dabei schwebt mir aber kein Command & Conquer vor (ich weiss dass das unrealistisch ist) sondern ein ganz simples Tower Defence, einfach um mal verschiedene Möglichkeiten bezüglich der Realisation zu testen. Dabei soll kein fertiges Spiel raus kommen, es soll einfach ein Experiment sein, um meine Java-Skills zu verbessern.

Meine Frage ist nun: Bei einem solchen Spiel gibt es viele Einheiten, und noch mehr Kugeln, die von diesen Einheiten verschossen werden. Also eine Unzahl an Objekten, welche verwaltet werden müssen. Nehmen wir einen handelsüblichen Rechner an, wie viele solcher Objekte kann Java verwalten, ohne dass es zu Verzögerungen kommt?

Oder anders gesagt, wie viele Einheiten und Kugeln kann ich als Objekt realisieren, bevor das ganze nicht mehr wirklich sinnvoll ist?
 
Theoretisch kannst du an die Grenzen deiner Hardware gehen. Wenn du eine zuwenig Memory hast wird ein OutOfMemoryError ausgeloest, wenn du der Prozessor überfordert ist wird das Spiel langsam.

Wieviele "Actors" du gleichzeitig berechnen und darstellen kannst musst du wohl selber rausfinden. Ich denke aber nicht, dass du damit Probleme haben solltest, wenn du deine Objekte nachdem sie zerstoert oder aus dem Bild hinauslaufen wieder schön aufräumst.

Hier im Forum gibts auch ein Game http://www.java-forum.org/spiele-multimedia-programmierung/6529-tutorials.html
Weiter nützliche Tips findest du bei GameGrid
 
Du kannst mal ein bisschen schätzen: Ein handelsübliches Objekt mit einigen Feldern benötigt vielleicht etwa 200-300 Bytes (mit Koordinaten, Verweis zu einem Bild, Schadenspunkte, etc....). 1 GB RAM kannst du ohne Probleme jedem Computer zumuten, also 1*1024*1024*1024/300 = 3'500'000 Objekte.

IMHO: Memory kannst du anfangs komplett ignorieren, aber achte darauf, dass du effiziente Algorithmen und Datenstrukturen verwendest. Denn CPU Power wird das grössere Problem sein.
 
Erwähnenswert wäre noch, dass explizites Aufrufen des Garbage Collectors den Speicherbedarf und erhöhen kann ("System.gc();")
 
Den sollte man aber nur selten selbst aufrufen, wenn überhaupt nötig:

FindBugs hat gesagt.:
Explicit garbage collection; extremely dubious except in benchmarking code

Code explicitly invokes garbage collection. Except for specific use in benchmarking, this is very dubious.
In the past, situations where people have explicitly invoked the garbage collector in routines such as close or finalize methods has led to huge performance black holes. Garbage collection can be expensive. Any situation that forces hundreds or thousands of garbage collections will bring the machine to a crawl.

Ich denke, dass am Anfang eher das Zeichnen wichtiger als CPU-Auslastung oder RAM ist. Zumindest war das bei mir immer das Erste langsame, CPU eigendlich nur wärend größeren Algos und RAM bei Bugs. Wobei ich aber dafür noch nie auf externe Libs gesetzt habe.


btw. warum ist Command and Conquer unrealistisch? So ein Tiberum Dawn wäre doch mit den richtigen Ansatz nicht allzu schwer zu realisieren, oder? Oder ein Dune 2-Clone. Das wäre genial. ^^ Außer vielleicht die KI, aber für dem Fall kann man es ja anfangs Multiplayer machen.
 

Zurück
Oben