Ich lese gerade ein Buch über Spieleentwicklung, in dem sie Ihnen zeigen, wie Sie Skripte für Ihr Spiel in Lua erstellen. Sie programmieren Lua und verwenden es aus C ++, aber ich fragte mich, ob es eine Bibliothek oder API gibt, um Lua aus C # zu verwenden: speziell aus XNA, um Spiele für PC und XBox 360 zu entwickeln?
18
Antworten:
Dies ist, wo ich Sie hinweisen würde (http://www.xnua.com/xna_lua_xnua), aber es wurde für eine lange Zeit nicht aktualisiert.
C # ist eine großartige Sprache und kann in gewisser Weise als Skriptsprache in Ihrem C # -Spiel verwendet werden. Nick Gravelyn hat einige nette Tutorials über die Kachel-Engine (http://blog.nickgravelyn.com/downloads/#tileengine) erstellt und eine benutzerdefinierte Skript-Engine verwendet, um den Dialog auszulösen. Er hat auch ein grundlegendes Beispiel, als er über das Schlüsselwort "yield" erfuhr: http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/
quelle
Wenn Sie nach Skripten in C # suchen, schauen Sie sich auf jeden Fall IronPython an . Es ist nicht nur eine Python-API für C #, sondern eine vollständig separate Python-Implementierung, die mit derselben CLR-Assembly (mit derselben Leistung) kompiliert wird wie C #, die jedoch als Skriptsprache verwendet werden kann. Jeder Lua-Wrapper für C # wäre aufgrund des Overheads von Marshalling sehr langsam.
quelle
Wie Sean sagte, ist IronPython einen Blick wert. IronPython ist eine der wenigen Implementierungen dynamischer Sprachen für .NET, die auf die Dynamic Language Runtime (DLR) abzielen. Es gibt mindestens ein Open-Source-Projekt, das auf die Implementierung von Lua im DLR abzielt (wie dieses ), aber ich bin nicht sicher, ob es Implementierungen gibt, die kurz vor dem Abschluss stehen. Ein gut implementierter Satz von DLR-Bindungen für Lua sollte eine Leistung auf dem Niveau von IronPython und IronRuby bieten und wäre viel schneller als ein Lua-Wrapper. Zum Vergleich: IronPython bietet im Allgemeinen eine bessere Leistung als CPython (manchmal sogar eine deutlich bessere).
Hinweis: Wie in ElementCy unten angegeben, werden DLR-Sprachen auf der Xbox 360 im Allgemeinen nicht unterstützt. Im DLR gibt es jedoch einen "interpretierten Modus". Ich weiß nicht genug darüber, um es sicher zu sagen, aber es könnte möglich sein, IronPython (oder andere DLR-Sprachimplementierungen) auf der Xbox 360 im interpretierten Modus laufen zu lassen, obwohl die Leistung sicherlich darunter leiden würde. Es könnte sich lohnen, jemanden im DLR-Team zu fragen, ob er weiß, dass dies möglich ist. Andernfalls sollte die Xbox 360 Reflection.Emit-Unterstützung als Teil der bevorstehenden Silverlight-Unterstützung erhalten. In diesem Fall kann ich mir vorstellen, dass es kein Problem ist, den DLR auf der Xbox 360 zum Laufen zu bringen.
quelle
Die beste Lösung, die ich Ihnen geben kann, ist, nur ein Skript in C # zu erstellen. Sie können sie zur Laufzeit kompilieren, wenn Sie auf Windows abzielen, und sie vorab für die Xbox kompilieren. (als dll)
Das wäre die einfachste Lösung. Sie können dies auch in VB.NET oder einer anderen .NET-Sprache tun. (Ich bin mir jedoch nicht sicher, was die Skripte angeht.) Grundsätzlich sage ich, dass Ihre Skripte in einer eigenen DLL enthalten sein sollen. Sie können sie zur Laufzeit unter Windows kompilieren lassen. (Wollen Sie wirklich, dass sie dies auf der Xbox 360 tun? Sie können Ihre Spiele dort nicht aktualisieren, zumindest glaube ich nicht)
Ich kann deine Frustration verstehen, ich wollte auch Lua benutzen.
Um es zusammenzufassen: 1) Haben Sie es zur Laufzeit unter Windows erstellt. 2) Erstellen Sie es vor der Hand für die Xbox 360
Das empfehle ich.
quelle
Der Lua-Interpreter ist nicht verwaltet, AFAIK. Sie können ihn also nicht für Xbox mit XNA verwenden
Sie können den Javascript- Interpreter Jint verwenden, der nicht auf DLR basiert und auf Xbox funktioniert ( http://jint.codeplex.com/ ).
quelle
Es beantwortet Ihre Frage technisch nicht (funktioniert auf der Xbox nicht), aber LuaInterface ermöglicht die Integration von Lua in C # relativ problemlos .
quelle
Um diese Frage auf den neuesten Stand zu bringen, habe ich den letzten Tag mit umfangreichen Suchanfragen verbracht und festgestellt, dass die Verwendung von UniLua (für die Verwendung mit Unity, reine C # -Implementierung) die beste und effektivste Option ist, um Lua auf Xbox zu bekommen. Ich habe es abgespeckt, das gesamte Unity-Material herausgenommen und es funktioniert großartig.
Ich habe auch einige Funktionen in LuaInterface hinzugefügt, indem der [] -Operator für LuaState überladen wurde, und so weiter.
CFWLua
Ich hoffe das war nützlich.
quelle