Каковы плюсы и минусы Lua vs. Python как языка сценариев для платформы XNA / C #? [закрыто]

9

Я думаю о том, чтобы попробовать одну из моих древних идей для игры. Суть этой игры - возможный уровень функциональной настройки игровой среды и объектов (например, изменение поведения оружия космического корабля). Для этого игра должна быть скриптовой. Кроме того, я не ставлю целью коммерциализацию, это просто интересная задача для меня.

Поскольку я в основном парень .NET, я буду использовать XNA / C # для самой игры. Для сценариев я думаю о переходе на Python или Lua. У меня есть предыдущий опыт работы с Python и я ничего не имею против этого как языка. Lua, с другой стороны, почти совершенно новый для меня, кроме некоторых незначительных модификаций аддонов World of Warcraft, которые я делал тут и там, и это выглядит многообещающе. Вот мой вопрос:

Каковы плюсы и минусы Lua vs. Python как языка сценариев для платформы XNA / C #?

Один из них значительно проще использовать с XNA / C #? Есть ли у них какие-то конкретные преимущества или недостатки при использовании с XNA / C #? Почему бы вы порекомендовали один поверх другого для XNA / C #?

famousgarkin
источник
4
Я знаю, что вы не спрашиваете об альтернативах, но на тот случай, если вы не знаете, C # также является допустимым языком сценариев, и, поскольку вы используете C #, он требует минимального обслуживания.
Уильям Маригер
2
Зачем вам вообще нужен скриптовый язык? Какие преимущества вы ожидаете?
Питер Олстед
2
Оба они популярны, профессионально используются и определенно способны выполнять сценарий. Это просто вопрос вкуса для 99% приложений. Python имеет лучшую стандартную библиотеку и, на мой взгляд, более удобный язык.
Cloudanger
1
По линии "вы рассмотрели?" Вы рассматривали Бу ? Он предназначен для сценариев, а не превращается в язык сценариев. Подобно IronPython, он имеет встроенные помощники для хостинга (и может даже интерпретировать для целей, таких как XBox).
Джонатан Дикинсон
1
Кроме того, не пренебрегайте визуальными сценариями (аналогично Staredit - редактору Starcraft 1).
Джонатан Дикинсон

Ответы:

11

Я не могу сравнить их, так как до сих пор у меня был только опыт встраивания IronPython в C #. Вот что мне нравится в этом:

1) Это просто! Скачайте DLL-файлы IronPython, добавьте ссылку в проект,

 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) Как видно из приведенного выше примера, IronPython фактически конвертирует в классы BCL, где это возможно. Результатом сценария является System.Numerics.BigInteger, а не PyObject.

3) dynamicКлючевое слово в C # было создано для ситуаций взаимодействия, когда у вас нет статического типа:

    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 за хороший пример, который показывает, как легко получить железный питон, бегущий .... хотя этого не было, о чем просил OP ;-)
tobsen
0

IronPython и C # хорошо сочетаются друг с другом, IronPython может быть добавлен в C # для повышения производительности. Так что если вы пишете игры, то вызовы Python в C # являются преимуществом. Сам Python не может использовать XNA, но может использовать Directx, что C # не может сделать напрямую.

Мех
источник
1
FWIW, Python также не может использовать DirectX «напрямую» - он взаимодействует с ним через оболочки, основываясь на том факте, что D3D является C / COM API. Именно так вы можете получить доступ к DirectX из C #.