我应该支持哪种游戏内脚本语言呢?
游戏内脚本将控制 NPC / AI 逻辑。
如果我要实现游戏内的脚本功能,应该支持哪种语言?
- JavaScript(内置浏览器支持)
- [TCL](http://en.wikipedia.org/wiki/Tcl)([java 中的解释器](http://sourceforge.net/projects/tcljava/files/jacl/))
- [Lua](http://en.wikipedia.org/wiki/Lua_(programming_language))([popular](http://trainofthoughts.org/blog/2007/09/16/lua-popularity/))
- [Squirrel](http://en.wikipedia.org/wiki/Squirrel_(programming_language))
- [CSI](http://blogs.msdn.com/delay/archive/2009/01/07/the-source-code-is-the-executable-releasing-csi-a-c-interpreter-with-source-and-tests-for-net.aspx)
- 其他
请记住,我的实现将在多个平台上运行,如.net,flash,javascript和java。
列出了可能性的优缺点是什么?需要多长时间才能实现解释器?
游戏脚本器正在寻找哪些功能? 其他游戏正在实施什么?
我想投票支持 javascript,因为每个人都可以阅读和编写它。
你有什么想法?
原文链接 https://stackoverflow.com/questions/1431468
我认为你是想说 "集成" 解释器,而不是 "实现" 它。根据你的能力,创建一个脚本语言的解释器可能需要很长时间。
我会使用 Lua,因为它非常容易嵌入。嵌入 Python 看起来很复杂,我没有真正追求过。
如果想要了解更多关于嵌入 Lua 以及其优缺点,可以参考这个链接。
我确信 Python 和 Lua 都有 .NET 和 Java 的绑定——你可以嵌入解释器。不知道是否有 Javascript 和 Flash 的绑定。
Python 的问题在于有三个变种,都是由不同的人开发的。
- 用于 .NET 的 IronPython
- 用于 Java 的 Jython
- 普通的 CPython
我没用过 Jython,所以不会评论它。但是,在 IronPython 和 CPython 之间存在某些可移植性问题。例如:IronPython 不支持本地 C 扩展。如果有使用这些的 CPython 脚本,将很难将它们移植到 IronPython。同样,如果 IronPython 脚本使用任何 .NET 库,将很难将它们移植到 CPython。
另一方面,Lua 的实现来自一个地方,我不会预期会出现这样的问题。
这取决于你的代码有多复杂(NPC行为有多复杂)。Tcl、Lua和JavaScript适用于简单的任务。在这些语言中快速编写大段代码往往会变得难以维护(特别是对于休闲用户)。
Squirrel使用类C语法,大多数人都会感到舒适,但是关于工具支持呢?如果你必须用记事本写一切,那也会严重限制你。
Python是一种成熟的语言,易于学习(只需将Lua的“教程”与Python自带的教程进行比较即可)。虽然各种Python版本可能会令人望而生畏(参见Rohit的回答),但游戏中的Python代码将对所有版本保持一致。它带有集成开发环境(IDLE),还有其他支持Python的IDE,可以提供代码完成、调试、运行测试用例等功能。
使用 Lua。它是一种美丽的语言,被广泛应用于游戏行业。
大多数平台都有 Lua 绑定:
- .Net:LuaInterface
- Flash:Lua Alchemy
- Java:Kahlua(替代实现)
也有 llvm-lua 项目,可能有助于将 Lua 移植到其他平台。
至于 JavaScript 作为主机平台……这个主题经常出现在 Lua 邮件列表 中,但还没有发表过严肃的解决方案。如果你真的需要将 Lua 托管在 JS 中,请在 Lua 邮件列表中询问,也许有些人可以分享他们在此方面的经验。
如果你想使用 Python,请考虑使用 Stackless,因为它在线程方面比标准的 CPython 更好。它被一些 MMORPG 游戏使用(如 EVE Online),因此在游戏方面具有一定的记录。此外,它非常适合使用 continuations(这也是它最初开发的一部分),这是一种在游戏中使用的“仿真”类型逻辑的相当不错的模型。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我更偏爱Python,因为它可以在许多语言中绑定。