Netzwek game machen
Übersicht

BurningSoulBetreff: Netzwek game machen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi Leute - war ne ganze Zeit schwer beschäftigt mit Schule,
hab jetzt aber endlich nochmal die Zeit gefunden, was an meinem game weiterzubasteln .... hab jetzt endlich nen zweiten Rechner *froi - und möchte unbedingt nen eigenen Egoshoot basteln ... naja hab schon vor einiger Zeit mit einem angefangen ... bloss wie krieg ich den jetzt in netzwerkmodus ?? hab mir die relevanten befehle schomma angesehen ,werde aba nicht wirklich schlau daraus wie ich die jetzt genau verwenden soll ... daher hab ich die bitte an euch ,mir mal nen kleines codebeispiel zu geben es würde schon ein code reichen ,wo es 2 dreiecke gibt (dahinter ne camera ,die dem jeweils eigenen folgt) und halt dann so, das spieler eins das erste dreieck steuert , und spieler 2 dann das zweite ..... wäre cool wenn das einer machen könnte- natürlich will ich keine dreiecke in meinem game ,aber wenn ich das an so nem konkreten beispiel sehe, dann kann ich das bestimmt ganz leicht in nem eigem game einbaun ![]() ----------------------------------------------------------------------- naja und dann noch ne theoretische frage zum weiteren verlauf : ich arbeite immer mit dem handle befehl , um einem entity seine übrigen eigenschaften wie lebenspunkte usw zuzuordnen ... jetzt weiss ich allerdings nicht so genau ,wie ich das netzwerktechnisch bewerkstelligen soll ,denn ein objekt, beispielsweise ein schuss, hat ja auf rechner eins sofern es nicht exakt zur gleichen zeit entstanden ist , ein anderes handle - und es muss ja irgendwie klar sein, welches objekt auf dem anderem rechner gemeint ist , wenn nach einem Treffer beispielsweise lebenspunkte abgezogen werden sollen - nun könnte man das ja alles komplett serverbasiert machen, so das nur auf dem server alle relevanten daten gespeichert werden, und für die übrigen spieler dann abgerufen werden können (zb hitpoints usw) bloss muss dann ja der client wiederrum dem server sagen können, welches objekt er jetzt meint ,um mit ihm bestimmteaktionen durchzuführen - beispielsweise wenn der spieler auf dem client eine homing missile auf ein objekt abfeuern will - selbst wenn die missile auf dem server erzeugt wird muss dem server ja geaagt werden, auf wen der client schiessen will ... ok ,das noch was zu theoretisch - ich will halt nur wissen wie ich es hinbekomme, das ein objekt auf dem einen rechner auf dem anderen angesprochen werden kann ,wenn nur der handle bekannt ist ... danke im vorraus Leute ! |
||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Netzwerk kannst ruhig TCP/IP nehmen sollte schnell laufen, Internet würd ich UDP nehmen. Zu der Verwaltung ... Ich würde 1 Type machen für alle Spieler. z.b. so:
Type TPlayer field X,Y,Z ;position field HP,Armor ;leben, panzerung field Weapons.TWeapon ;waffen + ammo / je nachdem was er aufsammelt field Name ;name field IP,PORT ;internet sachen field Free ;belegt ? End Type Dim PlayerSession(1).TPlayer Und dann sowas in der Art basteln: Function MULTIPLAYER_CreateServer(MaxPlayer....) ;TCP/IP / UDP Kram Dim PlayerSession(MaxPlayer).TPlayer for i = 0 to MaxPlayer-1 PlayerSession(i) = new TPlayer PlayerSession(i)\Free = TRUE next end function Jedoch musst du aufpassen mit Positionen, wenn ein Rechner schneller ist als der andere, am besten nimmst du einen Masterserver und der verwaltet alle bewegungen. Also das die Client nicht selber moven sonder ne Nachricht senden und der Server das Moven macht. Dazu brauch man aber einen guten Server. Ist aber sehr syncron ![]() |
||
BurningSoul |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen dank erstmal -das waren ja schon einige Infos ... nur das es noch nicht komplett vollständig war ... ich hab da inna hilfe was von sentipstream usw gelesen, aber ich hab noch nicht so die vorstellung , was damit gemeint ist .... der verschickt doch dann jede Frame im Prinzip nur nen String mit Infos, oder ??
und wo muss dieses start network game stehen ?? Allerdings ist Deine Antwort zum Theoretischen Teil meiner Frage sehr gut - Du baust also einfach ein spieler Objekt, und jedesmal wenn einer joint, wird davon eines erzeugt .... und wenn sich einer bewegt, wird nur ein "will sich nach vorne bewegen" an den Server gesendet .... so das man das ganze Spiel normal schreiben kann .... Bloss ist meine Frage mit den Handles noch nicht beantwortet, denn auf dem Server läuft jetzt alles richtig - aber wie kann der Server den übrigen objekten auf den Clients sagen wohin sie sich bewegen wollen, wenn nur die Handles bekannt sind ,und man den Figuren , schüssen oder Hintergrundobjekten nicht alle einzeln benanntz hat ?? Denn der Server muss doch irgendwie und das ist genau meine Frage , wissen, welche Handles diese objekte auf den Cileents haben - gibts da irgendeinen Trick ?? soweit sogut - wäre für weitere Anregungen & codebeispiele sehr dankbar |
||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Theorie: Das is gut
@Sentipstream: Kenn ich nich @Rest: Hmm... du solltest keine Handles versenden, sondern IDs der Spieler etc. Die Handels stehen in der Player / Waffen / Item Struktur. Ja das hast du richtig verstanden mit dem Laufen. Ich glaub dein Problem ist folgendes: Du hast 2 Spieler, 2 MD2 (oder B3D) Models und wenn sich ein Spieler bewegt soll sich das Models auf dem anderen auch bewegen. Gell ? Das is ganz einfach, du Speichert wenn der Spieler joint sein ModelHandle in seiner SpielerSession. Das gleiche macht er bei sich für dein Model. Wenn er jetzt anfängt zu läufen sendet ihr die von dir bekommene ID, z.b. 1001. Du kriegst jetzt also Nachricht: move 1001, vorwärts, dann kannst du in der PlayerSession gucken wem die ID 1001 gehört und dann seine PlayerDaten sowie das Model updaten / bewegen. Das System ist recht gut ![]() |
||
![]() |
ViciouS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guck dir mal den HL source an... (allerdings c++)
Der funzt so mit so einem server-client system.. |
||
Skaten ist scheisse...
Bilanz: 3 Knochenbrüche in 4 Jahren... und es werden mehr ![]() |
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
in dem source ist kein directer netcode. | ||
BurningSoul |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
gut , wenn ich ein Spiel mache ,indem es nur 2 Spieler geben kann,
dann klappt das vermutlich wunderbar - bloss folgendes : nehmen wir mal was praktisches : wir haben einen Server, (an dem auch gespielt werden kann) und 3 clients - client1 bewegt sich - nachricht (idclient) move forward 50 (einheiten) ... dann muss das Playermodell von client1 ja nicht nur auf dem server , sondern auch auf client 3 & 4 bewegt werden - nun ist es auf client 3 & 4 nur ein entity, der gemovet werden sollte , aber wie weiss der server, wie er den entity auf den clients identifizieren soll ? ok, das ist ne sache die vielleicht was später kommt ... aber es gibt ja auch anderes sachen : vielleicht gibt es in manchen levels ja auch monster - oder türen, bewegliche objekte oder ähnliches .... dahin zielt meine frage , wenn sich auf dem server ein monster (welches servergesteuert wird) bewegt , was muss dann der server dem/den clients schicken ? oder sollte der server einfach immer wenn er ein entity erzeugt, das handle des objektes dieses entities mitübertragen, damit er später , wenn er zb positionen updaten will, nur diese ID des objektes übertragen muss .... bloss dann haben wir das problem , das bei mehreren clients wieder jedes objekt ne eigene id auf jedem client haben kann .... ich muss zugeben ich bin was verwirrt .... am besten ich fang einfach mal irgendwie an ..... wäre gut wenn mir jemand mal das stück code schicken könnte, um das ich in meiner ersten frage gebeten hatte , da ich noch nicht weiss ,wie man die netzwerkbefehle richtig einsetzt ... auf jeden fall danke an alle für die zahlreichen hinweise ![]() <<<<<<<<<<<< Edit -das Folgende hat sich erledigt - ich lasse es nur stehen, damit keiner so blöd iss, den selben fehler zu machen wie ich - ich benutze nämlich die Firewall zonealarm - und OBWOHL ich diese beendet, und auch aus dem Taskmanager sowie aus der Autostart zu entfernen, hat sie es irgendwie geschafft, den traffic aus dem lokalen netzwerk in diesem fall zu blocken; nachdem ich sie gesatartet habe, und ihr gesagt habe, das es sich um ein "trusted" also vertrauenswürdiges Netzwerk handelt , lief es - auch wenn man sie wieder ausmacht .... hatte früher schomma probleme damit bis ich rausfand, das der Stealth modus ziemlich schlecht ist ,wenn man im Internet bei nem alten game (total annihilation heisst es) ein game hosten will - man sieht sein gehostetes game dann zwar selber ,aber niemand sonst *gg Alter Eintrag: Ich hab mir mal das Chat Beispiel im code Archiv angeschaut .... sieht ganz gut aus , nur hab ich jetzt nen neues Problemchen : ich hab das Teil gestartet ,und da gibt es dann ja dieses nette Fenster, das immer erscheint, wenn man mit DirectPlay arbeitet - also das was sich zusätzlich zum normalen Blitz programm öffnet, und wo dann oben im Fenster steht: "start multiplayer game" dort hab ich dann 3 connection möglichkeiten gehabt, nämlich Serielle,Modemverbindung, und Internet TCP/IP ... hab dann tcp/IP gewählt , was auf meinem Hauptrechner ging - auf dem zweiten erschien stattdessen die Meldung "unable to enumerate Sessions" da ich das beispiel hier aussem forum komplett übernommen habe, kann ich mit diesem Error nix anfangen ,es wird wohl keim Programmierfehler sein denke ich mal ... bei Spiele, wie zb UnrealTournamentI, und DiabloII kann ich in meinem Lokalen 2 pc netzwerk auch perfekt zocken ... was könnte das sein,und was macht man da am besten ? habe von netzwerktechnik leider 0 ahnung ![]() <<<<<<<<<<<<<<<<<<<<<< |
||
- Zuletzt bearbeitet von BurningSoul am Do, März 25, 2004 15:50, insgesamt einmal bearbeitet
IonPainter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
guck halt mal dis an:
http://www.ionpainter.de.vu/yadsrc.rar is ein ego-shooter mit netcode also ideal für dich wenn auch nich gerade anfängerfreundlich... |
||
BurningSoul |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen dank Dir ![]() ja, sowas hab ich gebraucht - ich verstehe zwar noch nix davon, aber das wird sich ändern, wenn ich mal mit etwas nicht weiter weiss, dann werde ich in Deinem code nachsehen ... muss nur zuerst mal nen überblick kriegen, und für mich alles entfernen, was über die reine funktionalität hinausgeht ... so zb das bannen von ips usw .... übringens : lustiges playermodel ![]() mfg, B.S PS: Womit haste den level gemacht ? |
||
IonPainter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Maplet | ||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Meine Fresse wie oft noch, du sendest keine Handles sondern vom Server vergebene IDs die auf jedem Client gleich sind. Dann kannst du wunderbar jeden animieren ... man. | ||
BurningSoul |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Furbolg
nu werd doch nicht gleich patzig erstens sagte ich schon das ich mit netzwert noch keine Ahnung habe, und zweitens ging es bei der Frage mit den Handles um die übrigen objekte, nicht die Spielerobjekte sondern zb monster usw ... mfg Soul |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group