Jakie są zalety i wady Lua vs. Python jako języka skryptowego dla platformy XNA / C #? [Zamknięte]

9

Zastanawiam się nad jednym z moich starożytnych pomysłów na grę. Istotą tej gry byłby możliwy poziom funkcjonalnej personalizacji środowiska gry i obiektów (np. Zmiana zachowania broni statku kosmicznego). W tym celu gra musiałaby być skryptowalna. Nie zamierzam też tego komercjalizować, jest to dla mnie tylko interesujące wyzwanie programistyczne.

Ponieważ jestem głównie facetem .NET, do samej gry użyję XNA / C #. W przypadku skryptów myślę o pójściu z Pythonem lub Luą. Mam wcześniejsze doświadczenie z Pythonem i nie mam nic przeciwko temu jako językowi. Z drugiej strony Lua jest dla mnie prawie zupełnie nowa, poza kilkoma drobnymi modyfikacjami dodatków do World of Warcraft, które robiłem tu i tam, i wygląda to obiecująco. Oto moje pytanie:

Jakie są zalety i wady Lua vs. Python jako języka skryptowego dla platformy XNA / C #?

Czy jeden z nich jest znacznie łatwiejszy w użyciu z XNA / C #? Czy jedna z nich ma jakieś szczególne zalety lub wady, gdy jest używana z XNA / C #? Dlaczego poleciłbyś jeden do drugiego dla XNA / C #?

Famousgarkin
źródło
4
Wiem, że nie pytasz o alternatywy, ale na wypadek, gdybyś nie wiedział, C # jest również poprawnym językiem skryptowym, a ponieważ używasz C #, jest to bardzo niskie koszty utrzymania.
William Mariager,
2
Dlaczego w ogóle potrzebujesz języka skryptowego? Jakich korzyści oczekujesz?
Peter Ølsted
2
Oba są popularne, profesjonalnie używane i zdecydowanie zdolne do wykonania części skryptowej. To tylko kwestia gustu dla 99% aplikacji. Python ma lepszą standardową bibliotekę i moim zdaniem jest bardziej przyjazny dla użytkownika.
Cloudanger,
1
Wzdłuż linii „czy zastanawiałeś się?” Czy zastanawiałeś się nad Boo ? Został zaprojektowany do skryptów, zamiast tak się stało, że stał się językiem skryptowym. Podobnie jak IronPython ma wbudowane pomocniki do hostingu (i może nawet interpretować dla celów takich jak XBox).
Jonathan Dickinson
1
Nie zaniedbuj także skryptów wizualnych (podobnie jak Staredit - edytor Starcraft 1).
Jonathan Dickinson

Odpowiedzi:

11

Nie mogę ich porównać, ponieważ do tej pory miałem tylko doświadczenie z osadzeniem IronPython w grze C #. Oto, co lubię w tym:

1) To proste! Pobierz biblioteki DLL IronPython, dodaj odniesienie w projekcie,

 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) Jak widać z powyższego przykładu, IronPython faktycznie konwertuje do klas BCL, gdzie może. wynikiem skryptu jest System.Numerics.BigInteger zamiast PyObject

3) Słowo dynamickluczowe w C # zostało stworzone dla sytuacji interop, w których nie masz dostępnego typu statycznego:

    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
źródło
+1 za przykład dobrej który pokazuje, jak łatwo jest dostać ironpython runnning .... mimo że nie był OP prosi o ;-)
tobsen
0

IronPython i C # pasują do siebie, IronPython można dodać do C #, aby zwiększyć wydajność. Więc jeśli piszesz gry, to wywołania Pythona w C # są zaletą. Sam Python nie może korzystać z XNA, ale może korzystać z Directx, czego C # nie może zrobić bezpośrednio.

Meh
źródło
1
FWIW, Python również nie może korzystać z DirectX „bezpośrednio” - współpracuje z nim za pomocą wrapperów, ponieważ D3D jest API C / COM. W ten sposób możesz również uzyskać dostęp do DirectX z C #.