Lua与Python作为XNA / C#平台的脚本语言的优缺点是什么?[关闭]


9

我正在考虑将一种古老的想法付诸实践。该游戏的核心点是游戏环境和对象的功能自定义的可能级别(例如修改太空船武器的行为)。为此,游戏需要编写脚本。我也不打算将其商业化,这对我来说只是一个有趣的编程挑战。

由于我主要是.NET专家,因此我将在游戏本身中使用XNA / C#。对于脚本,我考虑使用Python或Lua。我以前有使用Python的经验,没有反对它的语言。另一方面,Lua对我来说几乎是全新的,除了我在这里和那里所做的一些魔兽世界插件的小改动之外,它看起来很有希望。所以这是我的问题:

Lua与Python作为XNA / C#平台的脚本语言的优缺点是什么?

XNA / C#中的其中之一是否更容易使用?与XNA / C#一起使用时,其中之一具有某些特定的优点或缺点吗?为什么要为XNA / C#推荐一个?


4
我知道您不是在寻求替代方法,但是以防万一,您不知道C#还是有效的脚本语言,并且由于您使用的是C#,因此维护成本非常低。
William Mariager 2012年

2
为什么甚至需要脚本语言?您希望获得哪些好处?
PeterØlsted2012年

2
两者都很流行,专业使用并且绝对有能力执行脚本部分。对于99%的应用程序来说,这只是个问题。Python具有更好的标准库,我认为它是更用户友好的语言。
Cloudanger 2012年

1
遵循“您考虑了吗?”的思路 您考虑过Boo吗?它是为脚本设计的,而不是偶然成为一种脚本语言。与IronPython相似,它具有用于托管的内置帮助程序(甚至可以解释XBox之类的目标)。
乔纳森·迪金森

1
另外,不要忽略视觉脚本(类似于Staredit-Starcraft 1编辑器)。
乔纳森·迪金森

Answers:


11

我无法将两者进行比较,因为到目前为止,我只曾将IronPython嵌入C#游戏中。这是我喜欢的东西:

1)很简单!下载IronPython DLL,在项目中添加引用,

 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)dynamicC#中的关键字是针对没有静态类型可用的互操作情况使用的:

    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所要求的;-)
托布森2012年

0

IronPython和C#结合得很好,可以将IronPython添加到C#中以提高性能。因此,如果您编写游戏,那么在C#中进行Python调用将是一个优势。Python本身不能使用XNA,但可以使用Directx,而C#不能直接使用XNA。


1
FWIW,Python也不能“直接”使用DirectX -它基于D3D是C / COM API的事实通过包装与其进行交互。这正是您也可以从C#访问DirectX的方式。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.