Diskussionen über interessante Themen
-
Also da es wohl nun doch niemand gibt, der über "Game-Engine" (was auch immer genau das für'n Thema wär) diskutieren wollte, ist als nächstes mit 2 + 3 Stimmen "Scriptsprache" dran.
Bye, TGGC \-/
-
scriptsprache ist sehr interessant, ich hab mal was gegoogelt, und war geschockt, dass man sofort in der tiefsten compiler theorie gefangen ist.
es wär mal interessant, wieviel eine scriptsprache können muss, um schon eine scriptsprache zu sein, und wieviel scriptsprache man in der Praxis wirklich braucht.
-
Ne Skriptsprache schreiben und anwenden ist ja etwas total anderes, man muss sich
keine eigene Sprache schreiben, sondern kann fertige Skriptsprachen benutzen.Was mich jedoch interressieren würde, wäre wie man diese in sein Programm einbindet.
Habe nur einmal ein kleines Stückchen Code bei dem Lua benutzt wurde gesehen und
mir ist zwar die benutzung klar, aber nicht wie man so etwas weiträumig in ein
Programm einbindet und nacher z.B. die KI in der Skriptsprache schreibt.
-
TGGC schrieb:
Also da es wohl nun doch niemand gibt, der über "Game-Engine" (was auch immer genau das für'n Thema wär) diskutieren wollte, ist als nächstes mit 2 + 3 Stimmen "Scriptsprache" dran.
Bye, TGGC \-/
Ich lese gerade
-
SirLant schrieb:
Was mich jedoch interressieren würde, wäre wie man diese in sein Programm einbindet.
Kommt natürlich immer darauf an, welche Sprache man benutzt. Meine Skriptsprache der Wahl ist Python. Und das Einbinden dieser in C(++) Programme ist ein Kinderspiel. Man muss lediglich den Interpreter in sein Programm linken (bzw die Wrapper - lib für die Interpreter DLL), ein bisschen Wrapper Code schreiben um seine Python Funktionen von C aus aufrufbar zu machen und umgekehrt, und schon hat man ein Skript - Interface zu der (meiner Meinung nach) schönsten Skriptsprache wo gibt. Ich denke ähnlich wird es bei allen Skriptsprachen sein, die (auch) dafür gedacht sind als Skriptsprache eines Programmes zu dienen. Bei Python finde ich vorteilhaft, das es ein ähnliches Objektmodell wie C++ hat, das sich leicht miteinander integrieren lässt (zu sehen ua bei www.wxPython.org), eine schöne Syntax (besser als bei C, C++) hat und eine soooo grosse Auswahl von Modulen hat. Das ließe sich noch um einiges fortsetzen, aber wer wollte das dann noch lesen :D.
Generell: Wer an C++ gewöhnt ist, dürfte mit Python keine Probleme haben.
-
nehmen wir mal an, ich wollte eine scriptsprache erstellen, ich hab mir mal ein tutorial dazu durchgelesen, und eigentlich geht mir das viel zu weit, was die da machen...
wenn ich sowas machen würde, dann würde ich das vielleicht nach folgendem prinzip machen:
\1:
restart_game 5
im programm soll dann einfach die funktion restartgame(5); aufgerufen werden,dh meine scriptsprache soll die scriptsprache in funktionen übersetzen, die dann ausgeführt werden.
das kriegt man noch hin, also das ist nicht so das problem.
wie kann ich aber sowas lösen:
a=b+c;
in einem c++ programm, indem ich keine operatoren kennen würde, würde ich einfach folgendes machen:
zuweisung(a,addition(b,c));
sowas kann das script aber nicht generieren,der return wert ist im moment mein großes problem.
ich hab mir überlegt,ob man das so machen kann:
jede funktion besitzt eine return Variable,und der compiler macht folgendes:
aus: a=b+c wird
[cpp]
//irgendwo innerhalb einer Klasse
T return_addition;
addition(b,c);
zuweisung(a,return_addition);
der weg ist natürlich sehr umständlich, und ich bin auch nich sehr zufrieden damit, aber ich möchte soweit wie möglich von (pseudo) assembler entfernt sein(wenn das überhaupt möglich ist, falls nicht, dann muss ich mich dem schicksal beugen :P)
-
@ChokoCookie das meinte ich eigentlich nicht, das ist mir ja klar, habe ja wie
oben genannt schon kleine Beispiele bei Lua gesehen, was ich meine ist, wie man
die Skriptsprache in den C++ Code einbaut, so dass die Funktionen des Interpreters
meine Spielfunktionen mit den passenden Werten usw. aufrufen.
Dass ich das je nach Sprache anderst machen muss ist klar, und dass man einfach
die richtigen Funktionen des Interpreters hinschreiben muss, aber wie kann man
so etwas durchplanen und anschließend einbauen, dass es funktioniert.Mir fehlt einfach die vorstellung denkweise dazu um zu verstehen wie man das
in den Code 'flickt'
-
btw: kennt jemand ein gutes tutorial (wenns auf deutsch ist, noch besser
) für die aktuelle lua version?
-
Na ich denke, wenn man ein ordentlich designtes Klassenmodell in seinem Spiel hat, kann man das, oder Teile davon einfach für Skripte zugänglich machen. Ein paar Funktionen um die Kamera und die Modelle zu Steuern, dann noch für Sounds uä, das dürfte für Zwischensequenzen reichen. Kommt natürlich immer darauf an, wieweit man mit den Skripten in das Spiel eingreifen können will/soll. Wenn man zB Teile der KI skripten will, muss man detaillierten Zugriff auf die Spielmechanik erlauben.
-
ja klar,solche sachen werden einfach zu implementieren sein, aber sowas wie:
lightobjekt=turn_light_on(raum1->licht3)
bind(raum1->schalter1,lightobjekt)
kriegt man nichmehr so einfach hin,immerhin ist lightobjekt ein funktionpointer...
-
Ich schreiben unsere Scripts in C++ und binden sie dynamisch in das Hauptprogramm ein.
Ja genau, Dlls unter Win und SOs unter LinuxIch hatte mich voher mit Tcl und Lua abgequält, beide sind nicht geeignet
C++ Objekte vernünftig anzusprechen geschweige denn die Engine zu erweitern.Bei mir hat jetzt jeder Level eine eigenen shared object File, in dem der gesamte Scriptsource für den Level compiliert wurde.
Die Funktionen lade ich dann zur Runtime.
Nicht mehr benötigte Module werden über Garbage Collection aussortiert.Bin sehr zufrieden mit der Entscheidung, hat sich bisher nur bewährt.
Ok, man muß etwas mehr compilen, aber dafür brauche ich nacher keinen RuntimeInterpreter im Speicher halten und mir über die Speicherverwaltung und Parameterübergabe in Scriptfunktionen Gedanken machen.
Außerdem ist die Performance unerreicht
-
@Otze: Wenn du dich damit nicht abgeben willst, nimm Pyhton ;).
@Kane: für jedes Level eine DLL? Ist ja abgefahren. lol. Aber eine "Skriptsprache" (is ja wohl bei dir keine mehr), soll ja wohl vor allem einfach zu bedienen sein. Für dich und andere Leute, die Levels erstellen. Naja, falls ich mal genug Zeit habe ein "ernsthaftes" Spiel zu schreiben, verwende ich dafür auf jeden Fall auch wieder Python. Denn die von dir Beschriebenen Probleme gibt es damit sicher nicht. Ich glaube Performance ist bei Levelskripten auch nicht wirklich ein Problem.
-
vorallem nimmt dir dieser compilezwang die möglichkeit runtime zu scripten, du kannst also während des testes nich durchs level gehen, schalter betätigen, und im zweifelsfall vorort fixen.
aber das problem mit dem rückgabewert einer funktion geht mir nich ausm kopf,wie kann man das lösen?
(für leute die erst später zugeschaltet haben: a=b+c, b+c ist eine addition und deren rückgabewert wird a zugewiesen, wie krieg ichs hin, dass der rückgabewert der addition der gleichungsfunktion übergeben wird)
-
otze, auf die Schnelle wird kann man das schwer erklären. Am besten du liest ein Tutorial dazu.
-
Oder du kaufst dir das Drachenbuch, solltest du auf jeden Fall, wenn du das
ernsthaft machen möchtest, ohne Theorie wird es schwer.
-
-
buch is aufm weg zu mir
-
Ich gebe zu, dass ist keine Scriptsprache mehr was ich da benutze.
Ich persönlich finde Leveldesigner die nicht coden können und dann Scripts
schreiben die:
a) Speicherlecks erzeugen (von der Engine immer neue Resourcen verlangen)
b) Dinge durch Trial-and-Error lösen
c) allgemein ferhleranfällig sind oder keinen Weitblick haben
zeitaufwendiger als ein Runtime-modding.Da setze ich mich lieber selbst 5 min und schreibe einen (wiederverwertbaren)
"Script" der Türen öffnet und schließt ohne den Spieler zu zermatschen
falls er dazwischen steht.Das Compilen sehe ich eher als Vorteil, gute Compiler quitieren Fehler und
Warnungen bevor der Code in die Engine geladen wird.
Außerdem, man zeige mir eine Scriptsprache die Templates (und besonders die STL)
einbinden können ohne für jeden Rotz ne Wrapperfunktion zuschreiben.Außerdem kann ich die netten Debuggingfunktionen meines Compilers/IDE gleich
mitbenutzen.Zu Phyton:
Ich habe mal eine Präsentation zum Interfacen von OpenGL mit SWIG gesehen...
Grausam!Hab ich das "imho" vergessen ?! :p
-
Bei Python (und wahrscheinlich auch anderen Skriptsprachen), wird die STL wohl meistens überflüssig. zB Listen haben in Python die selbe Funktionalität wie std::vector, soll heissen man findet für alles ein equivalent, nur etwas bequemer zu benutzen.
Debugging ist in Python (imho) einfacher als bei C++.
Das argument mit den Leveldesignern die von coden keine Ahnung haben, ist wohl etwas kurzsichtig. Denn die, die etwas Ahnung haben, kommen mit Skripten sicher besser zurecht, als mit C++. Und denen, die keine Ahnung haben, musst es sowieso du schreiben. Wobei es sich wohl auch für Coder mit Python einfacher arbeitet als mit C++ (geht mir zumindest so).
Und pyOpenGl, finde ich nicht grausam (nach den Sampels, die ich gesehn hab). Das einzige, was wegfällt ist,
für jeden Rotz
ne Variable / nen Array zu deklarieren, per pointer an die Funktion zu übergeben und nacher eh nicht mehr brauchen zu können, weil der das Array die falsche Grösse hat / die Variable nicht den richtigen Namen. :p
Zu den Speicherlecks: in den Skripten entstehen die wohl kaum (zumindest Python hat nen hübschen Garbage Collektor), und das mit den Ressourcen von der Engine anfordern, ist wohl eher ne Frage des Interfacedesigns. :p
Naja, finde deinen Ansatz trotzdem cool, wenn auch etwas Umständlich
Besonders, wenn man was "mal so schnell" verändern will.
-
@TGGC: Ich verstehe deine Frage nicht.
Nur weil meine Scripts vorher und nicht während des Spiels compiled werden macht doch eine Scriptsprache nicht überflüssig.
Der C++Source wird eben bei einem Level dazu compiled, wie du auch ne Lightmap vorher berechnest.
Außerdem möchte ich den sehen der während das Spiel läuft, die Console öffnet
und sich sagt: "So, jetzt schreibe ich mal ingame den Script für den Lichtschalter hier".Mal im ernst die "Vorteile" von Interpretern werden, zumindest in dem Bereich überschätzt. Mandenkt sich "Die ganzen anderen Studios nehmen immer Scriptsprachen", also mach ich das auch....
Quark!