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

1

27.08.2013, 18:33

Suche Tutorials Winsock mit der SDL

Hey Leute

Habe mir heute ein paar tutorials zu Winsocks angeschaut.

Habe mir gedacht, versuche ich mal ein paar Bilder in der SDL über den Server zu bewegen, habe mich schon ein wenig schlau gemacht, wegen der funktion send() und recv().

Diese sollen ja anscheinend alle prozesse blockieren bis der Client b.z.w der Server die Operation abgeschlossen haben, was natürlich dann auch das Spiel in dem Sinne anhalten würde.

Habe das Stichwort Select dazu gefunden, worin auch meine eigentliche frage jetzt bestünde :)

Gibt es Tutorials für die SDL mit Winsock, also recht einfach gehalten mit Bildern Positionieren per Client und der Server führt das aus?

Gruß Leri :)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

28.08.2013, 16:44

Was genau meinst du mit Bilder positionieren? Du willst einfach Positionsdaten senden richtig? Dafür musst du doch im Prinzip einfach die Koordinaten übertragen. Es ist sinnvoll bei Nachrichten eine ID zu senden, welche festlegt um welchen Typ von Nachricht es sich handelt. Du wirst ja vermutlich mehrere verschiedene Dinge senden wollen und diese musst du unterscheiden können. So könntest du einen Nachrichtentyp für Koordinaten anlegen, einen weiteren um vielleicht Trigger senden zu können und so weiter. Eine Nachricht baust du nun so auf, dass du als erstes die ID sendest und dann die Daten. Beim abrufen der Nachricht wird die ID überprüft und ab dann weißt du wie du die folgenden Daten zu verarbeiten hast. Nachrichten mit selber ID sollten also immer gleich aufgebaut sein. Mal als Beispiel für solche Nachrichten:
du hat ein Byte am Anfang als ID der Nachricht. ID 25 könnte zum Beispiel für das einfache senden einer Positon gedacht sein. So würdest du möglicherweise erst 25 als Byte in die Nachricht schreiben und dann die einzelnen Komponenten deines Positionsvektors als float. Beim empfangen wird das Byte gelesen, die 25 wird als Positionsnachricht erkannt und so weiß dein Empfänger, dass er die einzelnen Komponenten eines Vektors als float einzulesen hat.
Das ist natürlich nur eine Möglichkeit. Für den Anfang finde ich es sinnvoll, wenn man sich langsam heran tastet. Versuch erst mal einfach eine Nachricht von einem Programm zu einem anderen zu senden. Das ganze erweiterst du indem Nachrichten hin und her gesendet werden. Als nächstes kannst du dich an einem Chat versuchen. Reicht ja für die Konsole. Zwei Programme sollen so kommunizieren können. Dann kannst du das ganze mal erweitern, sodass mehrere Programme (Clients) kommunizieren können. Geh ruhig in kleinen Schritten vor. Netzwerkanwendungen sind nicht unbedingt trivial, vor allem wenn man sich damit noch nicht beschäftigt hat. Stell dich auf viel Stress ein. Es wird seine Zeit dauern bis es so klappt wie du es möchtest. Wenn das soweit läuft kannst du ja mal versuchen eine Sprite über das Netzwerk zu bewegen. Als nächstes dann wie beim Chat, mehrere Clients können sich bewegen und das Ergebnis wird bei allen passend angezeigt.
Nun das ist der erste Schritt. Der ist auch noch vergleichsweise einfach. Mit der Netzwerkentwicklung werden viele Probleme auf dich zu kommen die du jetzt vermutlich noch nicht kennst. So dauert es nun mal seine Zeit eine Nachricht über ein Netzwerk zu übermitteln. Dadurch laufen deine Clients nicht alle genau gleich. Hierdurch kann der Spielzustand schnell asynchron werden. Das muss man versuchen zu verhindern. Es können schnell Probleme auftauchen durch die das Spiel ruckelig wirkt und auch hier kann man beliebig viel Aufwand reinstecken. Stell dich also auf eine langfristige Sache ein. Netzwerkentwicklung lernt man nicht mal eben nebenher und du wirst ne Menge Googlen müssen. Vielleicht gibt es auch gute Bücher zu dem Thema, da kenne ich selbst aber keins. Ich selbst habe mich mal eine Zeit lang durch unzählige Artikel und Forenbeiträge im Internet gewühlt. Ich würde dir vorschlagen das ganze nicht an einem Spiel zu machen welches du aktuell baust. Mach lieber viele kleine Testprojekte. Dabei versuchst du den Aufwand möglichst gering zu halten. Lieber eher kleine Schritte gehen und diese dann dafür richtig machen.
„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.“