Multiplayer
Übersicht

CrayholeBetreff: Multiplayer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wusste nich wo das rein gehört,aber:
Weiß einer, wo ich mehr über Multiplayer (In 3d-spielen) erfahre, wie z.B. wie ich sowas mach? hab nämlich Kene Ahnung ![]() Danke im Voraus |
||
Gewinnen ist nicht alles-so denken die Verlierer |
![]() |
Xadas |
![]() Antworten mit Zitat ![]() |
---|---|---|
schau dir mal den open source code von YAD - Yet Another Deathmatch and is hier irgendwo im forum | ||
Ey isch schlach disch kaputt! |
Crayhole |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Find ich net ![]() Aber ich mein auch allgemein mit Erklärungen etc. |
||
Gewinnen ist nicht alles-so denken die Verlierer |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sollte nicht so schwer sein.
Am besten schaust du dir mal die UDP und TCP Befehle auf Blitzbase.de an. Es spielt keine Rolle ob das Spiel 2D oder 3D ist. Das Prinzip ist das selbe. Ich mach es persönlich immer so das ich zuerst eine Nummer schicke. Diese dient dazu zu unterscheiden was geschehen soll. Z.Bsp. schick ich die Nummer 21. Der Server fragt dann ab was 21 bedeutet. Nehmen wir an es ist ein Positionsupdate in einem 3D Spiel. Der Server muss wissen welcher Spieler die Position durchgibt, und die Position selber: X,Y,Z. Das heisst der Client schickt dann folgende werte: 21, Client_id (oder name), X Pos, Y Pos, Z Pos. Der Server liest als allererstes dann die Erkennungsnummer aus, in diesem Fall 21, da diese Nummer ja bei allen Nachrichten immer Vorabgeschickt wird. Danach weiss er was 21 bedeutet und liest die Client ID aus (ein Int), danach 3 Floats für die XYZ Position. Wäre aber diese Nummer nicht wüsste der Server ja nicht was es als nächstes auslesen soll, ob Strings, Ints oder Floats etc. denn statt ein Positionsupdate könnte man auch ein Namens Update machen falls der Client den Namen ändern will. Z.Bsp nummer 22. Sieht dann vielleicht so aus: 22, Client_id, NeuerName$ Dann darf der Server natürlich nicht ein Int und 3 Floats lesen sondern ein Int und ein String. Deshalb diese Nummer zum unterscheiden, ich hoffe ich konnte dir das Prinzip erklären. Ich finde es so am einfachsten. Der Rest muss man sich einfach selber überlegen wie man es macht. Gibt halt auch verschiedene Varianten: Standalone Server - Clients 1 Server der das ganze Regelt mit den verschiedenen Clients die sich ausschliesslich zum Server verbinden. Will ein Client dem anderen eine Nachricht schicken so wird die Nachricht nicht dem Client direkt übermittelt sondern dem Server und dieser leitet sie dann an den richtigen Client weiter. Client - Client Der Client der ein Spiel erstellt dient als Server. Somit ist der Server Code direkt im Client eingebaut damit jeder Client als Server dienen könnte. Clients die dann diesem ServerClient beitreten möchten müssen zu diesem Verbinden. Das ganze wird dann von dem ServerClient aus geregelt, aber da der Server gleichzeitig Client ist kann er auch mitspielen. Hier mal ein Standalone Server - Client Beispiel: Für server: Code: [AUSKLAPPEN] udp = CreateUDPStream(7000) If Not udp Print "Es konnte kein UDP Stream erstellt werden." WaitKey() End EndIf Const CLIENT_CONNECTED = 1 Const CLIENT_DISCONNECTED = 2 Const CLIENT_MESSAGE = 3 Print "Server gestartet." Repeat If RecvUDPMsg(udp) <> 0 ip = UDPMsgIP(udp) port = UDPMsgPort(udp) id = ReadInt(udp) Select id Case CLIENT_CONNECTED name$ = ReadString(udp) Print "Neuer Client: " + name$ Case CLIENT_DISCONNECTED name$ = ReadString(udp) Print "Verbindung getrennt: " + name$ Case CLIENT_MESSAGE name$ = ReadString(udp) message$ = ReadString(udp) Print "Message from " + name$ + ": " + message$ End Select EndIf Until KeyHit(1) CloseUDPStream(udp) End Und für nen Client: Code: [AUSKLAPPEN] ;UDP Stream erstellen. udp = CreateUDPStream() If Not udp Print "Es konnte kein UDP Stream erstellt werden." WaitKey() End EndIf Const CLIENT_CONNECTED = 1 Const CLIENT_DISCONNECTED = 2 Const CLIENT_MESSAGE = 3 Print "Client gestartet." ;Name abfragen name$ = Input("Name: ") ;Dem Server bescheid sagen das es nen neuen Client gibt ;und wie er heisst. WriteInt(udp,CLIENT_CONNECTED) WriteString(udp,name$) SendUDPMsg udp,Int_IP("127.0.0.1"),7000 Repeat command$ = Input("Command: ") If Lower$(command$) = "end" Then Exit ;Dem Server sagen das wir ihm ne Nachricht schicken wollen ;also schicken wir ihm unseren Namen und die Nachricht selber. WriteInt(udp,CLIENT_MESSAGE) WriteString(udp,name$) WriteString(udp,command$) SendUDPMsg udp,Int_IP("127.0.0.1"),7000 Until KeyHit(1) ;Dem Server sagen das sich der Client trennt WriteInt(udp,CLIENT_DISCONNECTED) WriteString(udp,name$) SendUDPMsg udp,Int_IP("127.0.0.1"), 7000 ;Udp Stream schliessen CloseUDPStream(udp) End ;----------------- IP Umwandlungs Funktion ---------------------------------------- Function Int_IP(IP$) a1=val(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) a2=val(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) a3=val(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) a4=val(IP$) Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) +a4 End Function Function val(String$) ac=String$ Return ac End Function |
||
Crayhole |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
aber wie erstellt man ganze Srver, Menü-auflistungen, etc.??? | ||
Gewinnen ist nicht alles-so denken die Verlierer |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier gibt's ein Tut von *weißnichtmehr* dazu:
http://www.shit-seite.de/udp.bb Das Menü dazu, Serverkonfiguration, etc. ist nur eine grafische Oberfläche über die Funktionen. Sollte also nicht allzu schwer zu realisieren sein ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Crayhole |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke!
Ich gucks mir ma An |
||
Gewinnen ist nicht alles-so denken die Verlierer |
alliswrong |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich weiß, ich hole ein altes thema aus der versenkung. trotzdem, sowas muss gelobt werden: Danke @Jolinah für dieses super beispiel! Mit diesem code als vorlage kann man problemlos ein multiplayer spiel erstellen. Sowas müsste normalerweise als sticky thread ganz oben stehen!
[edit] allerdings gibts nen klitze kleine bug beim client: Code: [AUSKLAPPEN] ; Name abfragen Print name$ = Input$("Name: ") Muss heißen: Code: [AUSKLAPPEN] name$ = Input$("Name: ") Ohne "print", sonst wird der name nicht übertragen! |
||
aletes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
??
Also das 'Print' steht aber eine Zeile über dem 'Input'. Heißt ja nur, dass eine Zeile frei gelassen wird ![]() |
||
Herox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich hatte mal was veröffentlicht das mit Multiplayer zu tuhen hatte weil ich daran Probleme hatte, aber dieser Code wird dir sicherlich nützlich sein und bedenk du musst noch an dem Code was ändern nehmich die 2 Fehler aber wen du weiter unten schaust in dem Thread steht wie du die Abändern kannst der Code wird hoffentlich helfen da auch schon die steuerung eines Objectes eingebaut ist nur der Code ist etwas unübersichtlich! Der Link zum Thread: https://www.blitzforum.de/foru...hp?t=31826 MFG. Herox |
||
SYSTEMINFO: AMD Phenom 9850 Quad-Core Processor 2500 MHz||4 GB RAM ||MAINBOARD: ASUSTek M3N78-EM|| GRAFIK: NVIDIA GeForce 9600 GT
|| SERVER-HOMEPAGE: http://gamerxl.de/ [IM AUFBAU] |
- Zuletzt bearbeitet von Herox am Fr, Jul 10, 2009 11:56, insgesamt einmal bearbeitet
alliswrong |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ups ja, habe es in der gleichen zeile stehen gehabt ![]() sorry deswegen. aber der code ist fantastisch (so sagt es zumindest immer der peter von den ludolfs). dadurch ist es wirklich einfach koordinaten zu übermitteln und und und... ich wäre für sticky! [edit] ich glaube als einstieg ist dieser code mehr als ausreichend und sehr einfach erweiterbar. zudem ist er wirklich sehr übersichtlich @Herox, dein code ist bisschen zu unübersichtlich für anfänger. kurz und knapp hilft besser um ein verständnis aufzubauen. der code über uns ist wirklich nur auf udp beschränkt also perfekt zum lernen. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group