Selbst-handelnde Objekte im Client-Server Betrieb

tincup

Bekanntes Mitglied
Hi Leute.

Mache gerade ein paar Überlegungen zu einem Echtzeit Online-Spiel. Völlig unabhängig vom Typ des Spiels habe ich folgende Frage:

Angenommen serverseitig ist für jedes agierende Objekt im Spiel (Gegner, NPCs etc.) auch ein Java-Objekt erzeugt, welches entsprechend in der Spielwelt "handeln" kann. Wie implementiert man bei so etwas am besten das Timing dieser Objekte, d.h. dass immer wieder alle Objekte auch Code ausführen dürfen?

Für jedes Objekt einen eigenen Thread erstellen geht offensichtlich nicht, denn je nach Spiel kann es da ja um 1000e-10000e gehen. Eine Alternative wären eine Schleife, die in einem fixen Zeitinterval (z.B. 1 oder 2 Sekunden) eine Update-Funktion für jedes Objekt aufruft. Damit wäre die Engine aber irgendwie recht starr, jedes Objekt kann nur einmal pro Sekunde reagieren.

Hat jemand irgendwelche Ideen dazu?
 

dayaftereh

Top Contributor
Ich würde mal sagen! du hast die Objekte in eine Liste oder Map? Die würde ich in einem Bestimmten Zeit Intervall durchlaufen, um Kollision oder sonstige sachen zu prüfen und daruf zu reagieren!
 
S

SlaterB

Gast
wie sowas in echt funktioniert interessiert mich auch eher als dass ich es schon wüßte,
aber deine 1-2 sec sind ja übertrieben pessimistisch auf modernen CPUs, ist ja nicht so als wenn jeder davon 1000 Schachzüge in die Zukunft berechnen muss,
da würde ich erstmal von Film-Echtzeit ausgehen: jeder kommt 30x pro Sekunde dran!, zumindest für einige Grundfunktionen, Test auf neues Objekt in 'Sensorreichweite' usw.,

dann gegebenenfalls kurz etwas mehr zu tun, einen Plan für die nächsten Sekunden aufstellen und wiederum die nächsten zig Durchläufe nur beibehalten bis ein externes Ereignis wie ein Treffer eintritt,
in dem Fall dann sofort reagieren, da muss nicht 1-2 sec gewartet werden

in einem Spiel sind doch aber auch nur normalerweise wenige hundert komplexe Akteure gleichzeitig aktiv oder?
wenn für Unmengen an menschlichen Clients jeweils separate Spiele laufen (höchstens 10 zusammen mit 100 NPCs)
dann müssen derartige 'Instanzen' doch nicht alles auf dem gleichen Computer, gar im gleichen Programm ablaufen?
WoW hat sicher paar mehr PCs rumstehen..
 
Zuletzt bearbeitet von einem Moderator:

tincup

Bekanntes Mitglied
Hmm ja du hast vielleicht recht, man kann wahrscheinlich wesentlich schneller updaten. Damit wäre es dann nicht mehr so starr. Für größere Angelegenheiten müsste man dann über verschiedene CPU Kerne (per Threads) oder eben Rechner (wahrscheinlich sehr schwierig) ausweichen.

Für kontinuierliche Abläufe (z.B. Bewegung) muss man dann wahrscheinlich über die vergangene Zeit und die Geschwindigkeit des Objektes schrittweise bewegen.

Aber ihr seht es auch so, dass es nur diese beiden Möglichkeiten gibt (1. selbst laufen als eigene Thread oder 2. regelmäßig aufgerufen werden), oder?
 

tincup

Bekanntes Mitglied
Nachtrag:
Die Idee mit der Trennung der Zeitskalen ist auch nicht schlecht. Sehr schnelles Abarbeiten von stumpfen abhandeln (z.B. Bewegung) und selteneres Updaten, wenn es um Taktik und Planung geht.
 

Noctarius

Top Contributor
Ich würde einen ExecutorService nutzen und dort Events für die einzelnen Objekte registrieren. So hast du einen Threadpool und bist unabhängig von der Zeit.

Den Utils-Timer würde ich für solche Sachen nicht mehr benutzen. Schon gar nicht serverseitig.
 

tincup

Bekanntes Mitglied
Danke für die Tips und Links!

An eine Message-Queue hatte ich auch schon gedacht. Werde das alles mal durchgehen.

Welcher Timer ist geeigneter?
 
G

Gast2

Gast
Java:
public interface Denkleistung
{
    void think();
    void hit(GameEvent ge);
}

// ...

Collection<Denkleistung> gameobjects;

und die Liste immer fleißig durchrattern und bei jedem Object thnik() aufrufen ... das macht dann das was es soll und bei Objekten die ein Event erhalten (z.B. Treffer) rufst Du einfach hit() auf ... und übergibst da dann das entsprechende GameEvent

Welcher Timer ist geeigneter?
ein Thread und immer alles durchrassel ... die Zeit nehmen um abzusätzen wie weit sich die Objekte beim letzten think() bewegt haben
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
ZoXlike Audio Server selbst erstellen Spiele- und Multimedia-Programmierung 11
T MiniCraft - selbst nach Programmieren Spiele- und Multimedia-Programmierung 25
W Spiel-Grundlagen selbst austüfteln: Kollisionen? Spiele- und Multimedia-Programmierung 3
Waljakov Grafikfunktionen selbst schreiben? Spiele- und Multimedia-Programmierung 6
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
Kim_Dotcom Objekte synchronisieren Variablen Spiele- und Multimedia-Programmierung 19
K Bewegte Objekte per Mausklick entfernen Spiele- und Multimedia-Programmierung 3
N Helden: Verschiedene Objekte oder konkrete Unterklassen Spiele- und Multimedia-Programmierung 1
gamebreiti Wie Objekte versenden und empfangen Spiele- und Multimedia-Programmierung 4
J Objekte übereinander lagern Spiele- und Multimedia-Programmierung 1
L JavaFX Objekte bewegen Spiele- und Multimedia-Programmierung 3
Q Mehr objekte darstellen als Pixel vorhanden Spiele- und Multimedia-Programmierung 6
lord239123 Minecraft Nur sichtbare Objekte rendern Spiele- und Multimedia-Programmierung 5
Z Objekte animieren mit Threads Spiele- und Multimedia-Programmierung 4
M Objekte verschwinden durch Explosion Spiele- und Multimedia-Programmierung 2
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
A JME3 will Blender/j3o Objekte nicht einladen Spiele- und Multimedia-Programmierung 3
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
T JOGL 2D Objekte drehen rotate Spiele- und Multimedia-Programmierung 4
D Objekte in weiter Entfernung flimmern / flackern Spiele- und Multimedia-Programmierung 2
G 3D-Objekte / Grafiken gesucht Spiele- und Multimedia-Programmierung 6
S Klickbare Objekte im Spiel Spiele- und Multimedia-Programmierung 8
T Java3D: Objekte platzieren und entfernen? Spiele- und Multimedia-Programmierung 7
W Rotation aller Objekte einer 3D-Szene Spiele- und Multimedia-Programmierung 8
L 3D Objekte in Java importieren Spiele- und Multimedia-Programmierung 2
M Java3D Picking - falsche Objekte werden gepickt Spiele- und Multimedia-Programmierung 3
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
M Java3D Objekte entfernen und hinzufügen Spiele- und Multimedia-Programmierung 10
aze Java 3d Objekte überdecken 2d Komponenten Spiele- und Multimedia-Programmierung 7
aze Java 3D : 3D Objekte speichern und später wieder einlesen Spiele- und Multimedia-Programmierung 9
D Halbdurchsichtige Objekte Spiele- und Multimedia-Programmierung 17
F zu viele Objekte, Problem mit neuzeichnen. Spiele- und Multimedia-Programmierung 5
M Alle Objekte aus der SimpleUniverse entfernen Spiele- und Multimedia-Programmierung 2
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
B Position der ViewingPlatform und Visueller Objekte setzen Spiele- und Multimedia-Programmierung 3
B Isometrischer KartenEditor mit Animierten Objekte Spiele- und Multimedia-Programmierung 3
J 1x Punktlicht auf 5 Objekte benutzen Spiele- und Multimedia-Programmierung 17
F Maussteuerung-gezeichnete Objekte Spiele- und Multimedia-Programmierung 4
B Objekte zur Laufzeit verändern Spiele- und Multimedia-Programmierung 3
A durch Objekte hindurchzoomen Spiele- und Multimedia-Programmierung 2
S 3D Objekte ohne Java3D darstellen? Spiele- und Multimedia-Programmierung 10
J Zu viele Objekte - OutOfMemoryError Spiele- und Multimedia-Programmierung 3
L Objekte zentrieren Spiele- und Multimedia-Programmierung 2
G zur laufzeit objekte einfügen Spiele- und Multimedia-Programmierung 3
G 2D-Objekte werden nicht vollständig gezeichnet Spiele- und Multimedia-Programmierung 4
conan2 Objekte in richtiger Z-Reihenfolge zeichnen Spiele- und Multimedia-Programmierung 2
A Objekte nacheinander zeitgesteuert rotieren lassen Spiele- und Multimedia-Programmierung 4
H 3D Objekte ausfüllen Spiele- und Multimedia-Programmierung 3
T 3D-Objekte Laden Spiele- und Multimedia-Programmierung 3
D 2D Graphic Objekte in ein JPanel einfügen Spiele- und Multimedia-Programmierung 2
G Zugriff auf einzelne Objekte Spiele- und Multimedia-Programmierung 12

Ähnliche Java Themen

Neue Themen


Oben