@flyweight-pattern: Es geht darum Speicher zu sparen. Du willst ja tausende von Asteroiden. Also machst du eine Klasse, bei der alle gemeinsame Informationen fest sind und nur veränderliche Informationen variabel sind.
Beispiel:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
class Astroid
{
private:
float x,y,z; // Positionsangaben unterscheiden sich pro Objekt
static [DATATYPE] object; // Referenz auf das Bild oder das Modell des Asterodiden. Da statisch, belegt es nur 1 mal speicher
}
|
In diesem Beispiel brauchst du pro Objekt nur Speicher für die Position. Das Modell oder die Textur des Asteroiden hast du jedoch nur 1 mal im Speicher. Selbst wenn du mit Zeigern arbeitest würdest du 4 Byte pro Zeiger verbrauchen, nötig ist für alle Asteroiden nur 1 Zeiger => Speichergewinn.
@Spiel: Anlegen kannst du mit dieser Technik relativ viele Asteroiden. Auf deinem Server machst du es einfach so, das du dein Spielgebiet in Quadranten einteilst und die Asteroiden diesen zuteilst. Dann bewegst du einfach die Asteroiden in den Quadranten des Spielers (und den direkt angrenzenden) ganz normal. Die weiter entfernten bewegst du einfach nciht so oft und ungenauer oder gar nicht.
Die Spielwelt offen zu lassen halte ich für überflüssig. Ältere Spiele lösen dass so, dass du beim verlassen der einen Seite auf der gegenüberliegenden Seite wieder das Spielfeld betrittst. Wenn du die Quadranten deines Spielfeldes jetzt so behandelst als würde sie wirklich angrenzen, bekommen die Spieler das nocht nicht einmal richtig mit.