8

我和一些朋友正在用 Java 编写 MORPG,我们想使用脚本语言来,例如。创建任务。

我们没有使用 Java 编写脚本的经验。我们使用过 Python,但我们对它非常缺乏经验。我们中的一个人也使用过 Javascript。

我们应该使用什么脚本语言?我们不应该使用哪种脚本语言?

4

11 回答 11

9

我负责一个相当大的混合 Java/Jython 系统。我们使用 java 进行核心 API 开发,然后使用 Jython 将 Java 对象连接在一起。这是在科学计算环境中,我们需要能够快速组合临时数据分析脚本。

如果我今天从头开始这个系统,我不会选择 Jython 作为脚本语言。我很喜欢 Python,但我经常遇到 Python 类型系统和 Java 类型系统之间的尴尬不匹配。例如,如果您只想要一个哈希表,您应该使用 Python 字典还是 Java HashMap?根据您是仅在 Python 代码中本地使用数据结构还是跨 Java 边界传递数据结构,该决定可能会有所不同。Jython 为您做了一定数量的类型强制,但它并不完美。当首先使用脚本语言的目的是提高您的生产力时,甚至不得不考虑这样的问题是很烦人的。

我假设 JavaScript 或 JRuby 会有类似的问题。今天,我将选择一种专门针对 JVM 并利用 Java 类型系统的脚本语言。明显的候选者是 Groovy 和 Beanshell;Groovy 似乎最近势头强劲,所以我会仔细研究它。

于 2008-10-18T14:23:18.923 回答
7

我同意 Viktor 的 Jython 建议。除了 JavaScript(您已经提到,并且通过javax.script包内置在 Java 6+ 中)之外,GroovyJRuby也值得一看。

顺便说一句,您应该看看Wyvern,它也是一个用 Java 编写并使用 Jython 编写脚本的 MMORPG。它的作者史蒂夫·耶格( Steve Yegge)不时对此有很多话要说。:-)

于 2008-10-17T09:37:24.197 回答
5

Java 支持多种(脚本)语言,其中一些列在 Wikipedia herehere中。您可能应该选择具有强大 DSL 和元编程功能的语言,例如Clojure

但是如果你需要更简单的东西,JavaScript 可能是一个可行的替代方案。

于 2008-10-17T09:38:09.217 回答
4

Jython 怎么样?
http://www.jython.org/Project/

于 2008-10-17T09:30:28.640 回答
4

如何创建自己的专用脚本语言?如果您的应用程序是用 java 编写的,您可以使用 ANTLR ( http://www.antlr.org/ ) 来创建您的语言解析代码。

我之所以这么说是因为通用脚本语言可能会提供太多的功能(因为我假设它仅用于任务的脚本)。

但是如果制作自己的语言太难了,那么上面的任何建议都行得通——你只需要弄清楚如何将游戏的运行时绑定到脚本中。我还建议将 Lua ( http://www.lua.org/ ) 作为许多游戏使用的另一种选择。

于 2008-10-17T10:19:49.367 回答
2

简洁版本

不要使用脚本语言!而是专注于可配置性(这是非程序员可以做得很好的事情)。

更长的版本

支持使用脚本语言的一个常用论点是,它允许较少的程序员完成更琐碎的任务。不要相信这一点,它不会为您节省任何时间,因为真正的程序员已经很快完成了琐碎的任务。以可配置性而不是脚本为目标,您将复杂的算法和概念流到无能的游戏设计师手中的风险要低得多。:)

缺少热交换(编辑并继续)是在 MMOG 中实现脚本语言的一个原因(你不想为了小的代码更改而重新加载整个游戏),但是使用 Java,内置热交换,你真的没有理由在上面添加脚本语言。

我花了数年时间思考这些问题;那天我为自己的 MMOG 实现了完整的脚本语言、IDE、VM、调试器等。从那以后,我变得更聪明了。

如果您仍然选择走上无限蹩脚的不归路,请记住以下几点。

  • 选择一种已经存在了一段时间的成熟语言。
  • 在您制作自己的工具/插件/开始在虚拟机中进行黑客攻击之前,自动测试、调试和编辑将耗费大量时间。

迄今为止,我从未见过可以改善这种情况的 DSL(获得更易于维护的产品)。我自己,我将 Python 集成到我的独立游戏引擎中,但最终我意识到并把它撕掉了。“Stackless Python”只是“不可维护但速度快”的一种说法。拜托,如果我错了,有人纠正我吗?

于 2009-05-08T08:10:46.817 回答
1

请参阅Java:要嵌入 Java 桌面应用程序的脚本语言(宏)

于 2008-10-17T09:38:31.870 回答
1

你有很多选择:

甚至可能是 BeanShell ( http://www.beanshell.org/ )

我自己是 Python 的粉丝,所以我推荐 Jython,但它们可能都是合理的选择。

于 2008-10-17T09:39:39.403 回答
1

为此,我不得不推荐 Javascript。Mozilla Rhino http://www.mozilla.org/rhino/是一个很好的实现,可以完美地满足您的需求。

由于熟悉,我推荐 Javascript 而不是 Jython 或 JRuby。Trivial Javascript 遵循任何人都可以使用的非常熟悉的语法。但是,如果有人想做更激烈的事情,Javascript 是一种非常强大的函数式编程语言。

我经常专业地使用 Groovy 和 Ruby,并相信它们的用途最适合编写逻辑特别复杂的应用程序部分,而 Java 编写起来很麻烦。作为在游戏中使用的嵌入式通用脚本语言,Javascript 是更好的选择。我没有使用过 Python,但它在语法上与 Ruby 相似,而且我相信它的用途也会相似。

于 2008-10-17T16:21:29.560 回答
1

LuaJ 似乎是将 Lua 嵌入 Java 的好方法:

http://sourceforge.net/projects/luaj/

于 2010-03-24T13:39:42.023 回答
0

由于语法简洁,我是 Python/Jython 的忠实粉丝——如果你有一些 Python 经验,这可能适合你。

否则,基于 Java 语法的 Groovy 可能更容易学习,如果您的大多数开发人员都是 Java 人员。它还具有与 Java 语言和库更紧密联系的优势。

如果您考虑到简单的脚本,那么 Beanshell 很好——它不支持类。但是,我认为它在过去几年中没有得到任何支持(JSR 似乎将其扼杀了......)所以如果支持对您很重要,那么这可能是一个糟糕的选择。

于 2008-10-17T12:06:11.400 回答