Ich habe angefangen, einige kleine Spiele in Java zu machen, und ich denke darüber nach, C # für ein größeres Projekt zu lernen. Ich würde sehr gerne ein modifizierbares Spiel machen, aber jemand sagte mir, dass ich mich an Java halten muss, wenn ich möchte, dass das Spiel modifizierbar ist, obwohl ich nicht verstehe, warum.
Welche Eigenschaften der Programmiersprache machen eine Sprache besser für modifizierbare Spiele geeignet?
Antworten:
Es hängt davon ab, wie Sie Ihr Mod-System entwerfen möchten. Ich werde zwei davon untersuchen.
SDK
Höchstwahrscheinlich werden Sie verlangen, dass Ihre Modder dieselbe Sprache wie Sie verwenden und Mods über Reflection laden (oder ähnlich, abhängig von der Sprache Ihrer Wahl). Dies wird Sie offensichtlich auf Sprachen beschränken, die späte Bindungen ausführen können - und es gibt viele, die dies ausführen können (sogar C kann späte Bindungen mit einigen cleveren
LoadLibrary
Tricks ausführen). Du könntest sogar Meta-Modding machen, wobei ein Mod andere Mods hosten könnte (zB gescriptete Mods).Das erste Problem bei diesem Ansatz ist das Verbergen des internen Zustands. Wenn ein Modder beispielsweise C # verwendet, um auf private Mitglieder zuzugreifen, kann er dies auch tun (obwohl mehr Aufwand erforderlich ist).
Das zweite Problem ist das Hosting. Die Leute mögen es nicht wirklich, wenn auf ihrem System fremder Code ohne Sandbox ausgeführt wird. Als Worst-Case-Szenario könnten Sie einen Mod schreiben, der eine Seedbox aufbaut. Wenn dies bei einem ISP installiert wird, kann dies zu ernsthaften Reputationsschäden führen.
Scripting
Modder würden eine Sprache wie Lua verwenden, um Mods zu erstellen. Sie würden entweder eine Sprache benötigen, die nativen Code aufrufen könnte (um mit Lua zu kommunizieren); oder Sie müssten Ihre eigene Skriptsprache in der Sprache Ihrer Wahl schreiben.
Das erste Problem hierbei ist, dass die meisten Skriptsprachen interpretiert werden, was für Echtzeitsysteme möglicherweise nicht akzeptabel ist (siehe jedoch LuaJIT). wie Spiele.
Ironischerweise besteht hier immer noch das zweite Problem. Lua als Beispiel war ich extrem enttäuscht , dass ist , hat ‚Beschuss-out‘ -Funktionen im Kern / Standardbibliothek enthalten - so dass es als eine Sandbox - Umgebung (ohne großen Aufwand, Glück und Wartung) völlig nutzlos, es ist schwer zu Stellen Sie dar, wie wütend ich darüber bin, aber ich hoffe wirklich, dass sie einige starke Cocktails tranken, als sie diese Anti-Features enthielten . Sie könnten dies offensichtlich leicht vermeiden, wenn Sie Ihre eigene Sprache rollen würden (siehe: UnrealScript).
Schließlich können die Kosten für die Interaktion mit einer Skript-Engine unerschwinglich sein. Dies ist beispielsweise Lua in Kombination mit C #: C # hat einen erheblichen Overhead beim Aufrufen nativer Funktionen (über P / Invoke), und Lua ist eine recht gesprächige API. Dies kann zu Problemen führen, wenn die Art und Weise, in der Sie das 'Skript-SDK' entwerfen, viel Chatten zwischen Ihrer Primärsprache und Ihrer Skriptsprache erfordert (beachten Sie, dass C dieses Problem nicht wirklich hat). Wiederum können Sie dem ausweichen, indem Sie Ihre eigene Skriptsprache schreiben (und sie im Fall von C # in MSIL kompilieren) und sie auf schnellste Weise in Ihrer [virtuellen] Umgebung ausführen.
Da das Skript im Wesentlichen auf einem anderen System ausgeführt wird als Ihr Primärcode, können Sie den Zugriff auf den internen Status vollständig steuern (es sei denn, sie führen einige ausgefallene Aktionen mit den zuvor genannten Shell-Funktionen aus).
Fazit
Ich habe ein wenig vom Thema abgewichen , aber man kann im Grunde genommen aus dieser Textwand lernen, dass man in der Lage sein sollte, ein modifizierbares Spiel in jeder Sprache zu erstellen (ich würde sagen, dass man das kann ) - aber in einigen Sprachen kann zu mehr Arbeit führen. Bin ich ein bisschen anal in Bezug auf Sicherheit? Ja, Sie sollten es auch sein, wenn es um Benutzercode geht.
quelle
Ich würde sagen, die Sprache ist hier kein entscheidender Faktor. Es ist wirklich nur, wie flexibel und datengetrieben Sie Ihr Spiel gestalten, das es definiert.
Jedes Spiel wird mit einer Reihe von Daten ausgeführt (z. B. alles von Levels, Maschen, Konfigurationen, Gegenständen). Der Unterschied zwischen einem normalen Spiel und einem modifizierbaren Spiel besteht darin, dass das spätere Tool dem Benutzer ermöglicht, vorhandene Daten zu ändern (oder eigene Daten hinzuzufügen). Egal für welche Sprache Sie sich entscheiden, versuchen Sie einfach, Ihr Spiel so datengesteuert wie möglich zu gestalten, und vermeiden Sie das Hardcodieren von Spielinhalten. Praktisch jede Sprache, für die Sie sich wahrscheinlich entscheiden, kann Daten von der Festplatte lesen, was das meiste ist, was Sie brauchen.
Es ist auch auf halbem Weg, wenn Sie die Tools nur für Ihren eigenen persönlichen Gebrauch erstellen (zum Beispiel Ihren eigenen Level-Editor) und sie später perfektionieren und mit Ihren Benutzern teilen. Der Super Meat Boy Level Editor war so ziemlich das, eine verbesserte Version des Tools, das während der Entwicklung des Spiels verwendet wurde.
Abhängig von der Art des Spiels möchten Sie den Benutzern möglicherweise erlauben, einen Teil des Spielverhaltens zu skripten. In diesem Fall sollten Sie schon früh eine Skriptsprache in Ihr Spiel integrieren (entweder Ihre eigene oder eine vorhandene wie Lua oder Python, die beliebte Wahlmöglichkeiten sind). Dies fällt auch in die Kategorie des datengetriebenen Designs. Wenn Sie sich für die Verwendung einer vorhandenen Skriptsprache entscheiden, sollten Sie möglicherweise überprüfen, ob die Programmiersprache Ihrer Wahl über Bindungen für diese Skriptsprache verfügt (in der Regel in Form von Bibliotheken von Drittanbietern).
quelle
Die Sprache, die Sie auswählen, bestimmt nicht wirklich, wie veränderlich ein Spiel ist, und die Art und Weise, wie Sie die Sprache verwenden, ist wichtiger.
Wenn der Großteil Ihres Spiels datengesteuert ist (das heißt, die Spieldaten sind in einer Datei definiert, die aus Ihrem Code gelesen wird), kann das Spiel sehr modifizierbar sein. Dies kann in so ziemlich jeder Sprache erfolgen. Die Verwendung einer Skriptsprache erleichtert auch das Modifizieren eines Spiels.
Dies bedeutet jedoch nicht automatisch, dass es unmöglich ist, ein Spiel zu modifizieren, wenn Sie diese Dinge nicht verwenden. Minecraft zum Beispiel ist überhaupt kein sehr modifizierbares Spiel, es gibt jedoch ziemlich gute Dekompilierer für Java und eine sehr große Community für Minecraft, so dass eine Menge Werkzeuge entwickelt wurden, um Minecraft modifizierbar zu machen (verschiedene Modloader, Bukkit). Mit diesen Tools ist es möglich, Minecraft zu modifizieren (allerdings sind sie in einigen Ländern wahrscheinlich technisch illegal).
Der beste Rat, den ich Ihnen geben kann, ist, die Tools zu verwenden, die Modder verwenden sollen. Wenn Sie einen NPC aus einer Datei definieren, kann dieser modifiziert werden. Wenn Sie einen speziellen Code angeben, kann dies wahrscheinlich nicht der Fall sein.
quelle
Java ist perfekt zum Schreiben eines modifizierbaren Spiels geeignet.
Der beste Weg, um ein Spiel modifizierbar zu machen, ist normalerweise, eine dynamische Sprache zu verwenden, die in die breitere Anwendung eingebettet und für die Skripterstellung verwendet werden kann. In der Regel möchten Sie eine dynamische Sprache, da der Punkt darin besteht, zur Laufzeit mit dem Code interagieren zu können, ohne einen vollständigen Kompilierungs- / Build- / Testzyklus durchlaufen zu müssen.
Einige zu berücksichtigende dynamische Sprachoptionen:
quelle
Es gibt einen einfacheren Weg, dies in Java zu tun, obwohl es ein bisschen schlampig ist. Alles, was Sie tun müssen, ist, die Punkt-Java-Dateien in einem Ordner zu speichern und diese Batch-Datei mit dem Ordner zu versehen. Nennen Sie ihn Ausführen:
javac /src/.java Java / src /
Hinweis: Sie können beliebig viele Klassen hinzufügen. Hinweis: Stellen Sie in der letzten Zeile sicher, dass KEINE Erweiterungen (.java, .exe, .bat, ect.) Vorhanden sind.
Das kompiliert den Code einfach jedes Mal neu, wenn das Spiel ausgeführt wird. Wenn also die Spielquelle geändert wird, wird er kompiliert und dann das neu kompilierte Spiel ausgeführt. Leider können Sie die Mods anderer Leute nicht zum Spiel hinzufügen.
quelle