Was sind die Vor- und Nachteile von Lua vs. Python als Skriptsprache für die XNA / C # -Plattform? [geschlossen]

9

Ich denke darüber nach, eine meiner alten Ideen für ein Spiel auszuprobieren. Der Kernpunkt dieses Spiels wäre die mögliche Stufe der funktionalen Anpassung der Spielumgebung und der Objekte (z. B. das Ändern des Verhaltens einer Raumschiffwaffe). Dafür müsste das Spiel skriptfähig sein. Ich möchte es auch nicht kommerzialisieren, es ist lediglich eine interessante Programmierherausforderung für mich.

Da ich hauptsächlich ein .NET-Typ bin, werde ich XNA / C # für das Spiel selbst verwenden. Für das Scripting denke ich darüber nach, mit Python oder Lua zu arbeiten. Ich habe bereits Erfahrungen mit Python gemacht und habe nichts dagegen als Sprache. Lua hingegen ist für mich fast völlig neu, abgesehen von einigen kleinen Änderungen an World of Warcraft-Addons, die ich hier und da vorgenommen habe, und es sieht vielversprechend aus. Also hier ist meine Frage:

Was sind die Vor- und Nachteile von Lua vs. Python als Skriptsprache für die XNA / C # -Plattform?

Ist einer von ihnen mit XNA / C # wesentlich einfacher zu verwenden? Hat einer von ihnen einige spezifische Vor- oder Nachteile bei der Verwendung mit XNA / C #? Warum würden Sie XNA / C # übereinander empfehlen?

Berühmte Garkin
quelle
4
Ich weiß, dass Sie nicht nach Alternativen fragen, aber nur für den Fall, dass Sie es nicht wissen, ist C # auch eine gültige Skriptsprache, und da Sie C # verwenden, ist es sehr wartungsarm.
William Mariager
2
Warum brauchen Sie überhaupt eine Skriptsprache? Welche Bennefits erwarten Sie?
Peter Ølsted
2
Beide sind beliebt, professionell eingesetzt und definitiv in der Lage, den Scripting-Teil zu erledigen. Für 99% der Anwendungen ist es nur Geschmackssache. Python hat eine bessere Standardbibliothek und ist meiner Meinung nach eine benutzerfreundlichere Sprache.
Cloudanger
1
In Anlehnung an "Haben Sie darüber nachgedacht?" Hast du an Boo gedacht ? Es wurde für die Skripterstellung entwickelt, anstatt zufällig zu einer Skriptsprache zu werden. Ähnlich wie IronPython verfügt es über integrierte Helfer für das Hosting (und kann sogar für Ziele wie die XBox interpretiert werden).
Jonathan Dickinson
1
Vernachlässigen Sie auch nicht das visuelle Scripting (ähnlich dem Staredit - dem Starcraft 1-Editor).
Jonathan Dickinson

Antworten:

11

Ich kann die beiden nicht vergleichen, da ich bisher nur Erfahrung mit der Einbettung von IronPython in ein C # -Spiel hatte. Folgendes gefällt mir jedoch:

1) Es ist einfach! Laden Sie die IronPython-DLLs herunter, fügen Sie eine Referenz in das Projekt ein.

 using IronPython.Hosting;

 var engine = Python.CreateEngine();
 var product = engine.Execute<System.Numerics.BigInteger>(@"
 print ' '.join(['hello', 'from', 'ironpython!'])
 a = 123456789
 b = 10
 a**b
 ");
 Console.WriteLine("a**b={0}", product);

2) Wie Sie dem obigen Beispiel entnehmen können, konvertiert IronPython tatsächlich in BCL-Klassen, wo dies möglich ist. Das Ergebnis des Skripts ist eine System.Numerics.BigInteger und kein PyObject

3) Das dynamicSchlüsselwort in C # wurde für Interop-Situationen erstellt, in denen der statische Typ nicht verfügbar ist:

    dynamic example = engine.Execute(@"
class Example(object):
  def __init__(self):
    self.breakfast = ['ham','spam','eggs']
    self.lunch = 'BRAIINNNZ'
Example() # return an example");

    foreach(string item in example.breakfast)
        Console.WriteLine(item);
    Console.WriteLine(example.lunch);
Jimmy
quelle
+1 für das gute Beispiel, das zeigt, wie einfach es ist, Eisenpython zum Laufen zu bringen ... obwohl das nicht war, was OP verlangt hat
;-)
0

IronPython und C # passen gut zusammen. IronPython kann zu C # hinzugefügt werden, um die Leistung zu steigern. Wenn Sie also Spiele schreiben, sind Python-Aufrufe in C # von Vorteil. Python selbst kann XNA nicht verwenden, kann jedoch Directx verwenden, was C # nicht direkt kann.

Meh
quelle
1
FWIW, Python kann DirectX auch nicht "direkt" verwenden - es interagiert mit ihm über Wrapper, basierend auf der Tatsache, dass D3D eine C / COM-API ist. Genau so können Sie auch von C # aus auf DirectX zugreifen.