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

Anonymous

unregistriert

21

15.05.2003, 22:43

std::string::c_str(); gibt einen Pointer zurück (oder wars Array weis net mehr genau) auf jedenfall einen vom typ char, den kann man versenden! Willst du jedoch die struktur std::string versenden mit inhalt musste das schon anders angehen. Wie man das genau macht weis ich net, weil mit Netzwerkprogrammierung hab ich mich noch nie befasst!

string zu char:
char *myChar = mystring.c_str();

und umgekehrt:
std::mystring = myChar;

Ansonsten die im C++ Forum kennen sich feinstens damit aus.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

22

16.05.2003, 07:02

Ja, wenn man etwas für's Netzwerk programmiert, muss man höllisch aufpassen. Da hat es ja nur einen Sinn, "direkte" Daten zu verschicken, und keine Pointer. Dann ginge das wohl so:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
struct ChatMessage
{
    char from[32];
    char to[32];
    char text[1024];
};

std::string from, to, text;

ChatMessage msg;
strcpy(msg.from, from.c_str());
strcpy(msg.to, to.c_str());
strcpy(msg.text, text.c_str());


Bei der Netzwerkprogrammierung bieten sich also Strings fester Länge besonders an. Oder man macht sich die Mühe, ein aufwändigeres System zu basteln, das Strings beliebiger Länge unterstützt, das ginge auch... so in der Art:

Quellcode

1
2
3
4
5
// Eine Nachricht kommt an! Sie ist in p_msg gespeichert.
std::string from, to, text;
from = p_msg->getASCIIZString();
to = p_msg->getASCIIZString();
text = p_msg->getASCIIZString();


Ginge natürlich auch mit anderen Dingen wie ints, floats,... getASCIIZString liest aus den Daten der Nachricht, bis ein Nullzeichen kommt (d.h. der String ist zuende). Der String wird geliefert und der "Lesezeiger" in der Nachricht wird erhöht, so dass er auf den nächsten Wert zeigt.
Beim Füllen einer Nachricht:

Quellcode

1
2
3
4
5
6
7
8
9
Message msg;
float a, b, c;
int d, e, f;
msg.addFloat(a);
msg.addFloat(b);
msg.addFloat(c);
msg.addInt(d);
msg.addInt(e);
msg.addInt(f);


Ich glaube das ginge gut :)
So mach ich's beim nächsten Mal... (vielleicht in einem 2. Buch?)

DigitalDream

Frischling

Beiträge: 66

Beruf: Entwickler

  • Private Nachricht senden

23

26.09.2006, 18:01

Zitat von »"Ikari"«

Also ich will ja net klugscheisserrisch dastehen, aber wenn du die TriBase nachcodest für ein eigenes Game solltest du SingleTons, STL, Exceptions und vorallem D3DX Funktionen benutzen, denn die sind bestimmt das doppelte Schneller als selbst gecodete.


Das sollte man vielleicht erstmal selbst ausprobieren,anstatt es hinzunehmen und davon auszugehen das sie immer schneller sind.
Zumal es als angehender Entwickler besser ist,nicht nur ein SDK auswendig zu können,sondern die nötigen Mathekenntnisse mitbringt.
Oder bereit ist,sich auch mit den Algorithmen auseinanderzusetzen.
Eine Funktion aufrufen ist leicht,aber sie zu verstehen ,steht auf einem anderen Blatt.
Und im Falle einer Neuengine entwicklung wo DirectX nicht zur Diskussion steht,wäre man ziemlich aufgeschmissen,wenn einem dieses Wissen fehlen würde.


Zitat


Ansonsten muss ich dir ein Dickes lob für das Buch geben, naja nur das mit der DLL hätte man etwas "eleganter" machen können, das man nicht für die Engine (um sie zu benutzen) alle Dateien haben muss.

LoadLib wäre da besser gewesen, aber leider auch mehr aufwand. Aber saubere Arbeit *dick lob* :D


War das damals mal so?
In der heutigen Ausgabe kann man doch die lib einbinden.

Anonymous

unregistriert

24

26.09.2006, 18:04

Hallo? Warum kramst du Thread's raus, die vor 3 Jahren geschrieben wurden?
Das ist doch völliger Schwachsinn...

DigitalDream

Frischling

Beiträge: 66

Beruf: Entwickler

  • Private Nachricht senden

25

26.09.2006, 18:06

Seit wann ist es Schwachsinn wenn man die Suchfunktion nutzt.
Oder soll ich wegen dir extra einen neuen Thread aufmachen?

Desweiteren zwingt dich niemand einen Beitrag zum Thema zu leisten ...

Anonymous

unregistriert

26

26.09.2006, 18:18

Lieber ein neuer Thread als ein 3 Jahre alter. Das hat mehrere Gründe.
Die Suchfunktion zu nutzen ist wunderbar, nur wie gesagt in solch alten
Threads halte ich es nicht für angebracht noch einmal alles hochzuholen
und zu posten. Aber gut ich halt mich da raus.

DigitalDream

Frischling

Beiträge: 66

Beruf: Entwickler

  • Private Nachricht senden

27

26.09.2006, 18:31

Ich finde es nur komisch,dass man in Foren fast jeden 3. auf die Sufu verweist.
Aber man sich dann zu dem gefundenen nicht äussern soll,weil es zu alt sei.

Aber ich verstehe auch den Konflikt der durch veraltete Auflagen entstehen kann,deshalb werde ich es besser vermeiden.

Ich werde besser beim lesen bleiben anstatt zu fragen oder zu antworten.
Ist effektiver. :)

Anonymous

unregistriert

28

26.09.2006, 18:33

Genau das meinte ich. Suchen, lesen und wenn du es nicht kapierst -> neuer Thread.

Werbeanzeige