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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

31

05.01.2013, 23:48

console out ist auch eine gängige Interpretation. Afaik heißt es aber character out, was imo auch wesentlich mehr Sinn macht, denn cout ist ein Stream auf dem Zeichen ausgegeben werden können; dass dieser Stream sehr oft in einer Konsole landet, ist ein Detail, das Standard C++ nicht interessiert... ;)

Horni

Frischling

Beiträge: 21

Beruf: Student MB

  • Private Nachricht senden

32

06.01.2013, 00:14

Na ja, bei C++ beginnt eine einfache Textausgabe zum Beispiel mit "cout <<", bei C-Sharp ist es "Console.WriteLine". Das letzte kann ich mir gut einprägen, es sind einfach nur die englischen Wörter dafür, was ich erreichen möchte. "cout" ist nicht englisch, sondern kommt mir eher wie eine zufällige Anreihung von Buchstaben vor. Das Programmieren ist ein Hobby, das mir ansich Spaß macht, aber nicht, wenn ich für jeden zweite Methode erst in einem Buch nachschlagen muss. Die C#-Scripte sehen für mich verständlicher und einprägsamer aus.

Die Syntax mit "Console.WriteLine" ist eigentlich die gleiche die C++ auch verwendet. Man kann auch schreiben

C-/C++-Quelltext

1
cout.write("hallo welt", 10);

Aber die Syntax mit << ist intuitiver, wenn man Strings und andere Variablen zusammen ausgeben möchte, da dieser Operator die Verkettung unterschiedicher Strings und Zahlen ermöglicht.

C-/C++-Quelltext

1
2
int anzahl = 10;
cout<<"Die Anzahl ist "<<Anzahl;


Nebenbei ist das nicht direkt die Snytax von C++ sondern die Syntax, die die Bibliothek zur Verfügung stellt. Man kann seine Syntax in gewissem Rahmen selbst definieren und das macht diese Bibliothek.

Noctarius

Treue Seele

Beiträge: 120

Wohnort: Düsseldorf

Beruf: Manager of Developer Relations at Hazelcast, Inc. & Consultant for Scaleable Gameserver Systems

  • Private Nachricht senden

33

06.01.2013, 10:05

cout steht doch einfach nur für "console out" ;-)

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

34

06.01.2013, 13:22

Die Syntax mit "Console.WriteLine" ist eigentlich die gleiche die C++ auch verwendet. Man kann auch schreiben

Nein das ist nicht die gleiche. Console.WriteLine macht etwas deutlich anderes als cout.write. Und letzteres ist deutlich schwieriger zu benutzen. Denn man sollte es unterlassen, als zweiten Parameter wahlose Zahlen zu übergeben. Der zweite Parameter beschreibt die Größe des Blocks der geschrieben werden soll.

Nebenbei ist das nicht direkt die Snytax von C++ sondern die Syntax, die die Bibliothek zur Verfügung stellt. Man kann seine Syntax in gewissem Rahmen selbst definieren und das macht diese Bibliothek.

Die Bibliothek ist allerdings die Standard-Bibliothek und deren Umfang ist im Standard definiert. Klar kann man seine eigenen Klassen schreiben, die so funktionieren, wie man selbst will, aber letztlich ist C++ nicht C# und wenn man C# verwenden will, soll man C# verwenden und wer C++ verwenden will, soll C++ verwenden und nicht versuchen C# in C++ nachzubilden ;).

Horni

Frischling

Beiträge: 21

Beruf: Student MB

  • Private Nachricht senden

35

06.01.2013, 14:27

Dass die Methoden nicht genau das gleiche machen ist schon klar. Ich wollte darauf hinaus, dass Methodenaufrufe in C++ genauso funktionieren.
Geht mir auch nicht darum C# nachzubilden. Letztlich hängt die Syntax von der Bibliothek ab, die man verwendet und wenn er nicht gerade seine Spiele mit Konsolenausgabe schreiben will, wird er cout nicht brauchen. Das sollte er bloß wissen.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

36

06.01.2013, 22:07

Letztlich hängt die Syntax von der Bibliothek ab, die man verwendet [...]

an dieser Stelle möchte ich richtigstellen, dass die Syntax eine Eigenschaft der Sprache (C++, C#, Java, Python, ...) ist und nicht von der verwendeten Bibliothek abhängt
der Unterschied zwischen den Bibliotheken sind die zu verwendenden Bezeichner (Klassen, Namensräume, Methoden, ...)
aber die Diskussion geht schon wieder viel zu weit vom eigentlichen Thema weg...
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

37

07.01.2013, 20:18

So dann versuch ich mal ein bisschen was zu deiner Nachricht zu schreiben.

Zitat


Game Maker
Hi

Hier ein paar Dinge, die ich für unmöglich beim GM halte, aber ich lasse mich gerne eines Besseren belehren.

1. Speichern und Laden des Spielstandes anhand einer Variable
Was ich meine, ist dass der eingegebene Name für einen zu ladenden/speichernden Spielstand stets als Text gesehen wird.
Wenn ich zuerst eine Variable global.spielstand definiere, um beim Speichern beliebig viele Spielstände zur Verfügung zu haben (indem ich PCSpiel+global.spielstand eingebe). Das Programm speichert jetzt nicht unter zB. "PCSpiel73" oder "PCSpiel11", je nach Wert der Variable, stattdessen wird stets "PCSpiel+global.spielstand. Ziemlich speziell, aber du weißt sicher, was ich meine.

2. Ich kann einen Raum nicht auf seinen Ursprungszustand zurücksetzen, wenn ich bei "persistent" ein Häkchen mache. Wenn dieses Häkchen aber notwendig ist, zB. weil man ihn öfter betritt, kann er nicht auf den Ursprungszustand zurückgesetzt werden.

3. Der Hintergrund kann während des Spiels nicht geändert werden.

4. Keine Textvariabeln

5. Wenn es einzusammelnde Items gibt und sie im Inventar alle mit der Maus gleich positioniert werden können, verwende ich natürlich ein Objekt "item" mit einer Variable, die angibt, um welches, es sich handelt (1-Holz,2-Schwert,etc.). Damit der richtige Sprite verwendet wird, muss ich sehr umständlich für jede Möglchkeit ein eigenes If verwenden (If var=1->SpritevonHolz, if var=2->SpritevoneinemSchwert) Bei Excel kann man Listen anlegen, wo einer Zahl ein Text zugeornet ist und ein anderes Feld auf so eine Liste verweisen lassen, wo es dann automatisch den Text gemäß der Liste ändert. Bei einer professionellen Sprache geht das sicher auch.

Das wäre mir bisher aufgefallen, was mich an den Möglichkeiten des GM begrenzt, bin gespannt, wie du über diese Punkte denkst.

LG


Hier ist erst mal die Nachricht.

Zu Punkt 1:
Ich versteh nicht richtig was du meinst. Wenn du einen Spielstand speichern möchtest, dann leg doch einfach eine Datei an. In diese Datei schreibst du dann die Werte der Variablen welche du speichern möchtest. Zum laden kannst du diese Datei dann wieder einlesen und die Werte im Spiel neu setzen. Ob du nun globale Variablen darüber speicherst oder andere Variablen sollte egal sein. Bei GameMaker ist es auf jeden Fall nicht problematisch Spielstände zu speichern. Du gehst vermutlich einfach falsch vor. Die selben Probleme wirst du bei anderen Sprachen auch haben.

Zu Punkt 2:
Habe mit einem Bekannten geredet und der hat mir dein Problem mal etwas erläutert. Du kannst GameMaker einen Raum zurücksetzen lassen. Wenn Objekte in dem Raum sind, welche auf persistent gesetzt sind, musst du diese halt von Hand zurück setzen. Heißt die nachträglich erzeugten Objekte von Hand löschen. Je nach Ansatz einer anderen Engine ist das dort genau so. GameMaker bietet dir hier ja einfach nur die Möglichkeit selbst den Raum auf den Ursprungszustand zurück zu setzen. Bei XNA wirst du solche Dinge allgemein von Hand machen müssen. Du gewinnst also keine Funktionalität dazu, sondern verlierst eher welche.

Zu Punkt 3:
Guck mal hier

Zu Punkt 4:
Was meinst du mit Textvariablen? Normale Strings? Natürlich hast du die bei GML auch. Im Prinzip unterscheidet sich GameMaker hier nicht von anderen Sprachen.

Zu Punkt 5:
Nein das geht so ohne weiteres bei einer normalen Sprache nicht. Je nach Art der Sprache kannst du Arrays oder Dictionaries für sowas verwenden. Im Prinzip gehst du das aber falsch an. Wenn du ein Item erzeugst solltest du dem Item direkt am Anfang die passende Sprite zuweisen. Diesen ganzen If-Kram solltest du in so einem Fall nicht benutzen. Ist doch unsinnig wenn das Objekt weiß was es ist, aber jeden Frame noch mal nachfragen muss welche Sprite es verwenden soll. Also einfach beim erzeugen eine passende Sprite zuweisen und fertig.



Die Probleme die du hier mit GameMaker beschreibst zeigen eigentlich nur, dass du dich nicht lange genug mit GameMaker beschäftigt hast. Ich selbst kann wenig dazu sagen, da ich so gut wie nichts mit GameMaker gemacht habe. Habe es mir halt nur mal aus Spaß angeguckt und ein paar kleinere Spiele damit gemacht. Das wars. Ich selbst kenne aber Leute die damit einiges umsetzen konnten. Möglich ist damit einiges und das meiste davon sogar ziemlich einfach. Die Grundlagen muss man aber auch hier kennen. Das ist egal welche Sprache oder Engine du nutzt. Am einem gewissen Punkt ist halt etwas mehr nötig.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

38

09.01.2013, 17:57

Sry für die späte Antwort.

Punkt 1:
Hier kann auch ich dir nicht ganz folgen. Wenn ich die Speichern-Funktion verwende, speichert er das gesamte Spiel unter diesem Namen. Dass man auch nur eine bestimmte Variable speichern kann, wäre mir neu. Ich verwende D&D.

Punkt 2:
Okay, also keine zusätzliche Funktionalität.

Punkt 3:
Hat sich auch erledigt.

Punkt 4:
Wusste ich ebenfalls nicht (ich versuchte beim GM aber auch nie, das Geschriebene zwischen zwei " zu setzen, das kenne ich erst seit VB.

Punkt 5:
Ich würde auch nicht in jedem einzelnen Frame nachfragen, sondern bei der Erzeugung/Create-Event die ChangeSprite Funktion verwenden. Wenn ich ein umfangreiches Spiel mit 50 Items habe, soll es für jedes ein eigenes Objekt geben?


Danke für deine Antwort! Ich habe mich mit dem GM zugegebenermaßen recht oberflächlich befasst und es eher vermieden, neue Funktionen kennenzulernen, sondern eher die altbewährten wiederwendet. Außerdem war ich D&D-User, weshalb ich wahrscheinlich eh nicht auf alle Funktionen Zugriff hatte.

LG

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

39

09.01.2013, 20:30

Na da hast du es ja selbst eingesehen;)
Zum speichern kann ich selbst nur relativ wenig sagen. Wie gesagt ich habe selbst kaum mit GameMaker gearbeitet. Ich wusste nicht dass es schon die Möglichkeit gibt den gesamten Zustand zu speichern. Normalerweise geht man beim speichern wie folg vor:
Du guckst welche Werte von einem Objekt wichtig sind. Was soll genau von einem Objekt gespeichert werden. Normal ist es unwichtig den aktuellen Frame der Animation zu speichern, wichtig wäre aber zum Beispiel ein aktuelles Level zu speichern, oder wie viel Leben ein Charakter aktuell besitzt. Je nach Spiel ist es natürlich ein wenig anders was gespeichert wird. Bei Zelda zum Beispiel wird die aktuelle Position nicht gespeichert, sondern nur der Dungeon in welchem du dich befindest. Nach dem laden startest du am Anfang des Dungeons. Die aktuelle Position muss also nicht gespeichert werden. Wenn du weißt welche Werte du speichern möchtest schreibst du diese in eine Datei. Dafür kannst du eine Textdatei nehmen, was den Vorteil hat, dass du die Daten für dich leserlich speicherst. Du kannst sie natürlich auch in einem Binärformat speichern. Beim speichern schreibst du nun diese ganzen Daten in die Datei und beim laden ließt du die Daten aus. Mit den Daten erstellst du die Objekte neu und setzt die Werte auf die aktuell ausgelesenen. Mal ein kleines Beispiel. Du hast einen Charakter welcher zwei int Werte x und y besitzt um die Position zu speichern. Beim speichern schreibst du diese beiden Werte in eine Textdatei. Beim laden öffnest du die Textdatei und ließt die beiden Intwerte aus. Du erstellst im Spiel ein neues Charakterobjekt und setzt die x-Variable auf den eingelesenen x-Wert und die y-Variable auf den eingelesenen y-Wert.
Wie gesagt ich kenne die Speicherfunktion von GameMaker nicht, aber es ist oft so, dass Funktionalitäten einer Engine nicht 100% an deine Bedürfnisse angepasst sind. Da musst du dir überlegen ob du die Funktionalität irgendwie anpassen oder erweitern kannst um zum Ziel zu kommen, oder ob es alternative Wege gibt. Im Notfall schreibst du es dir halt selber.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

40

11.02.2013, 20:01

Immer diese langen Zugfahrten von der Uni nach Hause ... :D Die Zeit habe ich genutzt, diesen Thread mal komplett durchzulesen. Offensichtlich hast du angefangen, dich in C# einzuarbeiten. Prinzipiell ist das nicht verkehrt! :thumbup: Ich will dir jetzt nicht Sprache XY empfehlen oder dergleichen, sondern mal meinen "Weg" etwas auzeigen, in der Hoffnung, dass du dich davon vielleicht etwas inspirieren lassen kannst und es dir hilft, deinen eigenen Weg zu finden :)

Richtig mit Spieleprogrammierung habe ich unter Verwendung von Python begonnen. Ich finde nach wie vor die "pygame"-Library großartig! Das Experimentieren mit ihr hat mir enorm geholfen Zusammenhänge zu verstehen und erste Einblicke in die Thematik "Spieleentwicklung" zu erhalten. Inzwischen bin ich auf C++ und SDL umgestiegen und arbeite mit Codeblocks an einem 2D Rollenspiel. Früher mochte ich C++ aus dem gleichen Grund nicht, den du (gaaanz am Anfang) gepostet hattest: Ich habe auch nicht durchgesehen^^. Inzwischen möchte ich die Sprache inklusive Standardbibliothek und diversen anderen Libraries (wie SDL^^) nicht mehr missen.


Was ich dir damit sagen will: Lass dir Zeit und gib verschiedenen Sprachen eine Chance, bevor du dich auf die "nächst beste festfährst". Ich habe inzwischen mit Delphi, C++, Javascript, PHP, Python, Java und C# gearbeitet. Alle diese Sprachen haben ihre Berechtigung (und auch ihre speziellen Einsatzgebiete). Aber im Grunde ließe sich auch mit JavaScript ein Spiel programmieren. Alle Sprachen haben Vor- und Nachteile. Wiege diese für DICH persönlich und DEINE Ziele ab. Das ist das, was ich dir für dein Hobby auf den Weg geben kann :)

Mein Tipp für dich: Schau dir verschiedene Programmiersprachen an ;) Vielleicht ist die "richtige" Sprache für dich irgendwo da draußen - und du weißt es nur nicht.

Liebe Grüße
Glocke

PS: Ich bin kein auch kein Profi^^ Eine wichtige Schlüsselqualifikation - die ich mir mühsam aneignen musste - ist mit externen Bibliotheken arbeiten zu können.

Werbeanzeige