Problem mit Types bei Erstellung von Charakteren
Übersicht

![]() |
GearTechDEehemals 'KillerJo96'Betreff: Problem mit Types bei Erstellung von Charakteren |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich hab mir gedacht, dass ich mal sowas ähnliches wie einen 2D-Chat programmieren möchte. Somit habe ich damit auch schon angefangen. Ich wollte das so machen, dass ich für jeden Client, der neu dazu kommt einen Charakter erstellt wird und dessen Name per "Text" drüber steht und die auf einer Tilemap rumlaufen. Leider scheitere ich schon daran, für jeden Charakter der neu dazu kommt, einen Charakter zu erstellen. Ich weiß dass mir glaub ich irgendwann mal jemand gesagt hat, dass ich das mit Type machen muss. Jedoch wüsste ich jetzt nicht genau wie.. Mir schwirrt immer eins im Kopf rum. Ich kann ja mit PLAYER.Charakter = New Charakter .. einen neuen Charakter erstellen. Doch dann ist ja die Variable für den Player = PLAYER Wie kann ich jetzt machen, dass die Variable den Namen des zuvor mit Input erstellten Namen hat. Damit ich dann später machen kann: PLAYER\PosX$ = ... PLAYER\PosY$ = ... PLAYER2\PosX$ = ... PLAYER2\PosY$ = ... Oder gibt es da irgendwie andere Möglichkeiten wie man das macht. Ich hab leider überhaupt keine Ahnung. Mein einziges Problem ist jetzt also, wie ich für jeden Client der dazu kommt ein Charakter mit eigener Variable erstellt wird. Damit ich die nachher einzelnt abbarbeiten kann. Wie macht man sowas?? Bei den ganz großen Online Spielen wie WoW oder so... Könnte mir jemand bitte einen kleinen Einblick geben. PS: Das Type Tutorial von Robsite hab ich mir auch schon angeschaut. LG Killerjo96 |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sowas in etwa?
BlitzBasic: [AUSKLAPPEN] player.charakter=New charakter So macht ein Type-Konstrukt Sinn. Oder ich habe Dich völlig falsch verstanden ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, aber das problem ist doch, wenn ich dann die Koordinaten von denen bekommen, wird der eine player doch genau da hin gesetzt wo der andere auch ist, deswegen brauch ich ja verschiedene variablen... Ich bin auch nicch wirklich gut im beschreiben, was meine probleme angeht xD
ABer trotzdem danke. PS: was mir noch eingefallen ist, kann ich es nich so machen, dass wenn ich den Namen anspreche auch die Position X und Y von dem Namen anspreche? also in etwa so: Mein ganz normaler Player Code: [AUSKLAPPEN] Type Charakter Field Name$ Field PosX$ Field PosY$ End Type Code: [AUSKLAPPEN] Player.Charakter = New Charakter Dann krieg ich z.B. die Koordinaten mit nem String. Code: [AUSKLAPPEN] PlayerData$ = NetMsgData$() ;der ist aufgeteil: Player.Charakter\Name$ + " " + X + " " + Y Player.Charakter\PosX$ = X ;Vom Paket Player.Charakter\PosY$ = Y ;Vom Paket Sodass ich dann noch mache, Code: [AUSKLAPPEN] DrawImage Player,Player.Charakter\PosX,Player.Charakter\PosY Ich glaube ich stell mir das i-wie zu kompliziert vor... Mein Problem ist nur die Variablen Deklaration... Ich weiß nicht wie ich jeden Spieler auf seine Position X und Y ansrechen kann.. |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Player.Charakter = New Charakter
Das Player in deinem Beispiel ist nur der Verweis auf eine einzelne Instanz des Types Charakter. BB speichert intern alle erstellten Instanzen ab und Du kannst sie per before ![]() ![]() ![]() D.h. deine Spielerdaten sind nicht mehr an eine feste Variable gebunden, sondern Du hast wahlfreien Zugriff auf alle erstellten Objekte eines Typs. Beispiel: Player.Charakter = New Charakter player.name = "horst" samePlayer = first Character print sameplayer\name Vorausgesetzt dies ist der komplette Code werden nun Player als auch SamePlayer auf dieselbe Instanz zeigen. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst ganz einfach mehreren Playern verschiedene Variblennamen geben
BlitzBasic: [AUSKLAPPEN] Player1.Charakter = New Charakter Nun kannst du später die Player auseinandernhalten, da ja die X-Koordinaten von Player 1 so sind: BlitzBasic: [AUSKLAPPEN] Player1\X und die von Player2 BlitzBasic: [AUSKLAPPEN] Player2\X Willst Du sie anhand des Namens erkennen und auseinanderhalten, gehtst du so vor (angenommen NetName$ wäre der Name, der über die NetzNachricht empfangen wurde): BlitzBasic: [AUSKLAPPEN]
So könntest Du z.b. aus deinerr Netzmessage den Namen heraustrennen und dann anhand des Namens den entsprechenden Player in deiner PlayerListe suchen. Aber es würde auch das gehen: BlitzBasic: [AUSKLAPPEN] For locPlayer.Charakter = EachIn Charakter Hierbei übernimmt locPlayer die Funktion eines Platzhalters für alle derzeit existierenden Charakter. Wenn Du eine größere Anzahl Spieler verwalten willst, und dabei Zugriff auf jeden einzelnen zu jeder Zeit behalten willst, dann ginge das auch mit Arrays: BlitzBasic: [AUSKLAPPEN] Dim Player.Charakter[10] Wie du siehst, hast du mehrere Möglichkeiten die Player zu verwalten: A. mit individuellen Variablen: Player1 B. mit Array Variablen: Player[0] C. mit FOR/EACH und PlatzhalterVariablen: locPlayer |
||
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber ich kann doch kaum für was weiß ich wie viele Player (Bsp 2000) eine Variable erstellen. Wenn die am Anfang ihren Namen per PlayerName$ = Input("Dein Name: ") eintragen, wird mit CreateNetPlayer(PlayerName$) der Player erstellt.
Dann wird mit: Player.Charakter = New Charakter ein neuer Spieler erstellt. Dann sollen direkt x und y koordinaten an den server versendet werden und der sendet die dann an alle weiter. Aber dafür müssen die anderen Clients ja auch den Player erstellen, der erstellt wurde, sodass man ihn dann als Tile Charakter sieht und sich entsprechend bewegt. Es wäre doch unmöglich, immer eine Variable für jemanden zu erstellen der mit anderen zusammen spieln möchte.. Ich glaub ich versteh das i-wie falsch... LG KIllerjo96 |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit Types brauchst du weder individuellen Variablen noch ein Array. Solange du nicht Delete![]() ![]() Was du senden musst, ist sowas wie ein Steuerzeichen, das den Clients mitteilt: Hier joint ein neuer Player, das sind die nötigen Informationen und die Clients machen das richtige damit. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Njaa, schon kla.. aber wie... ich glaub ihr versteht nich so ganz was ich meine... | ||
Mit freundlichen Grüßen: GearTechDE |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann versuch's nochmal zu erklären ![]() Schritt für Schritt und wo dann das Problem auftritt. Neuer Client teilt dem Server mit, er möchte beitreten. Server akzeptiert und schickt jedem Clienten die nötigen Infos. Wo kommt da ein Problem mit Variablen auf? |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn du weißt, dass 2000 Player gleichzeitig an dem Spiel teilnehmen werden, dann brauchst Du auch 2000 Player-Variablen, um sie alle zweifelsfrei auseinanderhalten zu können.
Dies geht dann natürlich nicht mehr über Player1 , Player2... Vielleicht noch über Player[0] , Player[1] , ... Eine Liste, wo du sie alle über einen Platzhalter locPlayer ansprichts, hat da ihre Vorteile, aber auch Nachteile. Suchst Du einen, von dem Du via NetMessage nur den Namen weißt, dann bleibt dir nichts anderes übrig, als alle 2000 zu durchsuchen: BlitzBasic: [AUSKLAPPEN] Global DieserSpieler.Character Danach kannst du ihn unter DieserSpieler benutzen. Bist Du sicher, dass alle 2000 gleichzeitig online sein werden? Wieso denkst Du, dass es unmöglich wäre, immer eine Variable für einen neuen Mitspileler zu erstellen? |
||
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ach ddas ist einfach Schwerpunkt zu beschreiben. also nochmal ganz ausführlich...
ich habe einen Server erstellt, der bei sich per print eine Nachricht ausgibt, wenn ein neuer Client gejoined hat. jetzt habe ich mir so auch schon einen Chat geschrieben der ganz gut funktioniert. jetzt wollte ich eine tilemap machen, wo am Rand Bäume sind, die eine Kollision vorbeugen. so hat man also eine Fläche von 20x20 Tiles. jetzt habe ich im Internet ein Charakter tileset gefunden. das hab ich dann eingebaut. rein theoretisch ist dann der Charakter schon erstellt. zwischendurch wird in der Main loop immer noch nach Aktualisierungen gesucht. also wenn dann ein Server die Nachricht bekommt, das ein neuer Spieler da ist, soll er das an alle clients weitersenden. die clients die dann diese Nachricht bekommen, sollen für den neuen Spieler einen neuen Spieler von dem tileset erstellen. deswegen die Types. aber wie kann ich jetzt die Koordinaten austauschen, damit die zum richtigen Spieler kommen und nicht irgendwie zum falschen...ndurch wird in der Main loop immer noch nach Aktualisierungen gesucht. also wenn dann ein Server die Nachricht bekommt, das ein neuer Spieler da ist, soll er das an alle clients weitersenden. die clients die dann diese Nachricht bekommen, sollen für den neuen Spieler einen neuen Spieler von dem tileset erstellen. deswegen die Types. aber wie kann ich jetzt die Koordinaten austauschen, damit die zum richtigen Spieler kommen und nicht irgendwie zum falschen... |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst einen Spieler über den Namen, eine ID, oder IP oder was auch immer eindeutig identifizieren können. Das muss mit den Koordinaten mit verschickt werden, damit der richtige Player angesprochen wird. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich benutze direct Play.... | ||
Mit freundlichen Grüßen: GearTechDE |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Davon verstehe ich zugegebener maßen nichts, aber ich wäre mir ziemlich sicher, das du dich trotzdem selbst um den Versand von Nachrichten kümmern musst...
NetMsgData ![]() ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok ich probiers einfach nochmal und denk was drüber nach. wenn einer weiss ich vor zu gehen habe, der melde sich bitte.
danke lg Killerjo96 |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde dir empfehlen auf direct play zu verzichten - die Schnittstelle war schon bei Einführung ein Flop und ist heute quasi tot, und das nicht ohne Grund. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
joa schon, aber ees ist ja noch nicht verboten ^^ ausserdem für solche kleine Dinge ist es find ich noch gut geeignet also für mich. UDP ist bei mir halt so ne Sache, ich habe irgendwie nicht den Anreiz es zu lernen. aber setze mich langsam mal ran. danke für die Hilfe.
Lg Killerjo96 |
||
Mit freundlichen Grüßen: GearTechDE |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group