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

10.07.2012, 17:04

Return, was muss ich hier tun

C#-Quelltext

1
2
3
4
5
public class Player {

    string name;
       NetworkPlayer NWplayer;
}


C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    static public Player GetPlayer(NetworkPlayer player) 
    {
        
        foreach(Player plyr in ConnectedPlayer)
        {
            if(plyr.getNWPlayer() == player) 
            {
                return plyr.getNWPlayer();
            }
        }
        
        return 0;
        
    }


da wo return 0 steht.. wie kann ich das machen, das ich irgendwas wie noplayer() oder so zurück geben kann falls der Player nicht existiert??? 0 Geht ja leider nicht, da es kein integer ist..
Nichts ist unmöglich.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MaZy« (10.07.2012, 17:49)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

10.07.2012, 17:08

Mach Player zu einer Klasse, dann kannst du auch null liefern (nicht "0", sondern "null").

Aber mal davon abgesehen, hab ich den Eindruck, dass du noch nicht so weit bist, um ein Multiplayer(!)-Spiel zu schreiben.
Geh die Sache langsam an.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

10.07.2012, 17:25

Auch solltest du imo möglicherweise dein Design überdenken. Wofür genau brauchst du diese Methode GetPlayer()? Was hast du mit dem zurückgelieferten Player vor?

4

10.07.2012, 17:48

@David Scherfgen, wie meinst du das? Player ist doch eine Klasse oder verstehe das gerade falsch? Die Player werden in PlayerHandler erstellt per Player ply = new Player(hp, position..) usw. Die Methode wird ebenfalls dort aufgerufen und null hab ich auch schon davor versucht.

EDIT: Komisch. Ich habe vorher immer eine Meldung bekommen. Jetzt plötzlich meckert es nicht mehr, wenn ich null angebe. Das ärgert mich ziemlich, weil es Zeit kostet und ich auch dazu nichts gefunden habe. Kein Wunder.. weils richtig war..

@Dot

Ich habe eine Playerklasse, wo mehr Member aufgelistet ist als hier kurz geschrieben. Ich arbeite mit Unity und er gibt mir immer wenn ein Spieler verbindet ein NetworkPlayer. Deswegen hab ich ein Member als NetworkPlayer "NWplayer". Dort weise ich wenn ich ein Player erstelle zu.

Aber um jetzt die selbsterstellte Playerklasse anzusprechen gehe ich durch eine Schleife, falls eine Request vom Client kommt. Da ja der Request nur NetworkPlayer und andere Standardsachen wie integer, strings usw. mitgeben kann sah ich nur diesen Weg. In diesem Fall geht es um Nickname überprüfen. Ein Spieler soll nicht, den gleichen Namen haben. Ein Request vom Server and Client, wo er fragt wie er heißt. Der Client gibt sein Namen als string und standard den NetworkPlayer (Dort sind nochmal ip,port und andere Sachen zu lesen) als antwort. Um jetzt zu wissen,welcher Spieler mir geschrieben hat, muss ich die Schleife durch um Networkplayer zu vergleichen

Daher die Methode, um durch die Schleife die den erstellten Spielerinstanz (heißt hoffentlich so) der in der Array eingetragen ist anzusprechen.

Natürlich hat die Playerklasse auch GET-SET-Methoden wie GetName GetHealth GetNWplayer usw.
Nichts ist unmöglich.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MaZy« (10.07.2012, 17:56)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

10.07.2012, 17:55

Ich meine mich zu erinnern, dass du mal geschrieben hast, Player sei ein struct.
Wenn es eine Klasse ist, kannst du null liefern. Wenn das nicht geht, ist es keine Klasse - so einfach ist das.

6

10.07.2012, 18:07

Achso hehe :)
Das stimmt schon, aber das war nicht hier. Mittlerweile hab ich das in eine Klasse umgeändert. Deswegen habe ich extra oben nochmal public class geschrieben.

Mittlerweile geht das schon. Ich hab den Post davor editiert. Ich habe immer eine Fehlermeldung bekommen als null eingetragen habe. Und habe auch keine Lösung gefunden und war am Verzweifeln. Kein Wunder. Die Lösung hatte ich bereits. Nur ich weiß nicht warum es als Fehlerzeigte.

Zu noplayer(). Das habe ich mal in eine andere Sprache gesehen. Da gabs immer sowas wie noplayer() noentity(). Dachte hat was vllt damit zu tun. Nur um das noch zu klären :huh:
Nichts ist unmöglich.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

10.07.2012, 18:28

Schau dir mal das Null Object Pattern an: http://en.wikipedia.org/wiki/Null_Object_pattern
Vielleicht beschäftigst du dich noch etwas mit den Grundlagen bevor du mit einem Netzwerkspiel anfängst? Daran scheitern sogar Profis.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

10.07.2012, 18:29

Kannst du diesem Objekt nicht einfach eine Methode nicknameAvailable() geben oder sowas?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

10.07.2012, 18:40

Schau dir mal das Null Object Pattern an: http://en.wikipedia.org/wiki/Null_Object_pattern

In Objective-C ist das ja noch ganz witzig, aber in C++ oder C# ist es doch einfach nur hässlich und auch noch unnötige Last für den Speicher und GC. Bin kein großer Fan davon, ganz ehrlich. Vor allem muss man am Ende ja doch wieder auf null prüfen, weil man das von irgendwo reingereicht bekommt oder ähnliches:
myMap.[key].Foobar(); <-- da kracht's ja dann doch wieder, wenn der key nicht drin ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

10

10.07.2012, 18:44

Das war nicht unbedingt eine Empfehlung, auch wenn ich es in bestimmten Situationen ganz praktisch finde.
Er sprach von einem "NoPlayer" Objekt und ich wollte ihm zeigen was er vermutlich gesehen hat.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige