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 #?


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);

+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.


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 #.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.