Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

31

20.09.2012, 23:35

Genau :-)
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

32

21.09.2012, 06:56

@ LInsoDeTe: Womit habt ihr eure Client-Server Architektur aufgebaut? Lidgren? Wäre interessant :)

Saik0

Treue Seele

Beiträge: 171

Beruf: Anwendungsentwickler

  • Private Nachricht senden

33

21.09.2012, 08:51

Jetzt siehts noch genialer aus ^^!

LInsoDeTeh

Treue Seele

  • »LInsoDeTeh« ist der Autor dieses Themas

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

34

21.09.2012, 09:59

@Saik0: Dankeschön :)

@ LInsoDeTe: Womit habt ihr eure Client-Server Architektur aufgebaut? Lidgren? Wäre interessant :)

Nein, da kam kein Framework ins Spiel, das ist gutes altes handgemachtes TCP, mit System.Net.Sockets.TcpClient und System.Net.Sockets.TcpListener :D

Das liegt aber auch daran, dass Server und Client selbst nur stumpfes senden und empfangen erledigen und die empfangenen Sachen dann per Callback einfach nur weiterleiten.
Das Parsing der empfangenen Infos übernimmt dann eine MapManager.dll, die sich um alles kümmert, sprich Spielerinfos übertragen, Blöcke verwalten, Chunks laden, speichern, entladen, neues Terrain generieren... (insgesamt 5 Threads).

Auf diese Weise kann ich die MapManager.dll sowohl im Singleplayer, als auch im Multiplayer verwenden und muss nicht alles doppelt implementieren. Im Singleplayer werden die Strings dann direkt an die DLL geschickt, im Multiplayer steckt eben noch eine stumpfe 1:1 TCP Übertragung dazwischen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LInsoDeTeh« (21.09.2012, 10:04)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

35

21.09.2012, 12:06

Parsen erledigt bei euch der MapManager? Wäre es nicht sinnvoller dafür eine Zwischenschicht zu implementieren? Die könnte ja parsen und dann die jeweiligen Befehle weiterreichen. Doppelt müsstest du da eigentlich auch nichts erledigen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

LInsoDeTeh

Treue Seele

  • »LInsoDeTeh« ist der Autor dieses Themas

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

36

21.09.2012, 12:26

Parsen erledigt bei euch der MapManager? Wäre es nicht sinnvoller dafür eine Zwischenschicht zu implementieren? Die könnte ja parsen und dann die jeweiligen Befehle weiterreichen. Doppelt müsstest du da eigentlich auch nichts erledigen.


Da habe ich mich bewusst gegen entschieden, da ich auf diese Weise auf Clientseite nicht unterscheiden muss, ob ich online oder offline bin. Das Spiel produziert nur Befehle in Form von Strings und gibt sie an die Clientklasse weiter. Diese entscheidet dann, ob sie es direkt an den MapManager sendet, oder per TCP verschickt. Der Server pflückt nur den TCP Stream auseinander und reicht die Stringbefehle seinerseits an den MapManager weiter. Genauso erhält die Clientklasse die Antwort entweder über den TCP Stream oder direkt vom MapManager lokal.


Bei einer Zwischenschicht müsste ich im Spiel selbst unterscheiden, ob ich Befehle ausführe, oder verschicke. Das erledigt jetzt die Clientklasse, da die Befehle immer per String kommen.


Ein weiterer Vorteil dieses Ansatzes ist, dass ich das komplette Handling in einer Klasse mit Multithreading liegen habe (Da sind insgesamt 5 parallele Threads am Werk). Gerade wenn es z.B. um das Generieren von Terrain geht, was recht rechenaufwändig ist, habe ich hier beim lokalen Spiel einen enormen Performancegewinn, als wenn der MapManager direkt angesprochen würde. So hatte ich es nämlich vorher und das war echt übel...

Und PS: Auf diese Weise ist es später auch sehr leicht, ein lokales Spiel ebenfalls z.B. als LAN-Spiel zu öffnen.

Noodle

unregistriert

37

21.09.2012, 14:20

Einfach genial :D

Also ich find meistens sowieso alles klasse wo ein Raumschiff vorkommt :rolleyes: aber sieht echt gut aus, freue mich wenn's was spielbares für die "Öffentlichkeit" gibt...

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

38

21.09.2012, 16:58

Würde es denn nicht Sinn machen deine Befehle in Objekten zu kapseln? Aber gut;) Jeder wie es Ihm beliebt.)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

LInsoDeTeh

Treue Seele

  • »LInsoDeTeh« ist der Autor dieses Themas

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

39

25.09.2012, 01:45

So, mal wieder ein kleines Update :) Wie ihr sehen könnt, ist unsere Asteroidenbasis fast fertig :)

Desweiteren ist auch ein erheblicher Teil der Wirtschaft jetzt fertig. Auf dem Screenshot seht ihr, wie der Miningtower Nuggets produziert. Der Typ der produzierten Nuggets hängt von den Rohstoffvorkommen im Boden unter dem Turm ab (auf dem Screenshot ist es Gold). Diese können dann als Items per Drag & Drop auf Schiffe geladen werden (Schiffmenü links). Das komplette Item/Blöcke Drag & Drop Prinzip funktioniert mit jedem Gebäude, das Ressourcen-Interaktion erlaubt (z.B. das Ressourcenlager, oder die Gießerei, die aus den Nuggets Blöcke macht) sowie jedem Schiff, das Ladeplätze hat (dazu müssen im Schiffsdesigner Laderäume platziert werden, ein simples Kampfschiff ohne Laderäume hat natürlich dann auch keine Item Slots) und ist vollständig fertig implementiert.

Als nächstes stehen auf der ToDo Liste: Die Funktionalität der Gießerei fertig machen (d.h. Nuggets in Blöcke umwandeln, ähnlich wie der Ofen in Minecraft, sowie das Produzieren von Items wie Antennen, Bojen etc. aus bestimmten Rohstoffen), ein paar mehr Sektortypen in den Terraingenerator einbauen, sowie die Integration von Sonnen und Sonnenkollektoren. Wenn das fertig ist, soll die erste öffentliche Alpha steigen. Was hoffentlich am Mittwoch der Fall sein wird. Hoffe, viele von euch sind dabei :-)


(Link)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LInsoDeTeh« (11.08.2014, 22:49)


MitgliedXYZ

Alter Hase

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

40

25.09.2012, 16:51

Sieht schon richtig gut aus. Wenns rauskommt würde ich es sofort kaufen...

Werbeanzeige