Frage

Ich versuche, ein Spiel zu schreiben und Scripting zu implementieren, so dass später in der Entwicklung werde ich nicht alles neu kompilieren, wenn ich Zahlen ändern möge.

Mein Problem ist, dass ich weiß nicht, wie Skripte mit dem Spiel-Interface sollte. Die Skriptsprache Ich verwende Angelscript .

Im Moment habe ich einen Zustand: das Intro Zustand, die ich als Test für die meisten Module in meinem Spiel „Motor“ (es ist mehr wie eine lose Sammlung von Klassen). Es wird geladen und zeichnen Sie ein Bild und Text zeichnen, und scripting selbst zu aktualisieren verwenden, und vielleicht zu einem Dummy-Zustand schalten danach den Zustand Manager zu testen.

es beim Schreiben, erkannte ich, dass das Skript mit den meisten der Aktualisierung tun würde erfordern, dass ich a href <= „http://www.angelcode.com/angelscript/sdk/docs/manual/doc_register_type.html“ rel = „nofollow noreferrer“> registrieren die meisten meiner Spiele-Engine die Module mit dem Skript , und so ziemlich den Großteil des Codes auf der Skriptsprache bewegen. Persönlich würde ich lieber den C ++ Teil den Großteil der Arbeit zu tun, und habe die Skriptsprache mit den Zahlen kam in den Formeln / Zeichnung zu verwenden, / was auch immer.

Allerdings, wenn ich Recht habe, tut es auf diese Weise würden viele verschiedene Update-Module für die Mehrheit der Dinge im Spiel mit sich bringen, die aktualisiert werden müssen, und zu verlangen, dass sie alle in geladen werden, und dass die C ++ Code würde jede Update-Funktion individuell ausgeführt werden.

Oder gibt es eine Möglichkeit Skript und Programm Interoperabilität zu erreichen, die ich mit Blick auf. So oder so, könnte mir jemand helfen, herauszufinden, was der beste Weg, Scripting werden umgesetzt in mein Spiel ist?

War es hilfreich?

Lösung

Es gibt keine richtige Antwort auf eine so große Frage wirklich. Sie tun es auf die gleiche Weise Motor / Spiellogik Trennung in C ++ tun würde. Definieren Sie eine API, die das Skript aufrufen, dass es erlaubt, was auch immer es ist, dass Sie es tun wollen. Registrieren Funktionen in dieser API mit dem Skript, und verwenden Sie die API in Angelscript. Was die API sollte, hängt ganz von Ihren Bedürfnissen und welche Art von Macht Sie die scripter geben wollen.

Andere Tipps

Wenn Sie AngelCode (oder ein anderer Skript Ansatz Ihrer Wahl), nur „kommen mit einigen Zahlen“, hey, es auf diese Weise verwendet werden - zB in AngelCode, kompilieren die Skripte durch eine einzelne C, um sie auszusetzen ++ Funktion von Ihnen, sagen: „Leeren ProvideNumberFor (string Grunde Zahlenwert)“ und die Skripte für den Aufruf dieser Funktion so oft verantwortlich sein, wie erforderlich, um „die Zahlen zu liefern“, und nichts weiter.

Wenn Sie vertraut sind mit Qt4 / Javscript können Sie immer QtScript http: / /qt.nokia.com/doc/4.5/qtscript.html .

Wenn Sie an realen Beispielen wie Garry Mod aussehen oder mit Unreal geschrieben Spielen Sie werden feststellen, dass einiges an Logik in der modernen Spielen in den Skripten implementiert ist. C / C ++ Code ist am besten für "statische" und Engpass anfälligen Teile des Motors, wie der Renderer, Physik-Engine, Low-Level-Networking etc. Scripts sind am besten für den Inhalt (das heißt, Spiellogik).

Neben: Die beste Spiel-Skriptsprache IMHO ist Lua . Es bietet einfache intregration mit C / C ++, ist sehr gut dokumentiert und wird für die Nutzer von Javascript vertraut sein.

Ich habe Lua für genau diesen Zweck verwendet, und es macht einen guten Job. Schauen Sie sich all die Spiele mit Lua programmiert. Außerdem ist es unglaublich schnell.

EDIT: Ich habe die Frage nicht vollständig lesen ... sorry. Dies ist meine wirkliche Antwort;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top