【发布时间】:2011-02-16 04:43:27
【问题描述】:
虽然我正在开发的程序是用 Java 编写的,但从 C 的角度回答这个问题也很好,考虑到其中大部分与语言无关,或者发生在 Lua 方面。
在我正在编写的游戏架构的大纲中,特定类中的各个类型的游戏对象(例如:生物、物品、法术等)是从数据文件中加载的。它们的大多数属性都是简单的数据类型,但我希望这些成员中的一些实际上包含简单的脚本,例如,定义一个项目在使用时的作用。脚本将非常简单,因为所有基本的游戏动作都将通过 Java 的 API 公开。 Lua 只负责将这些基本函数串在一起,并设置参数。
问题主要是关于将特定 Lua 函数的引用存储为 Java 类成员的最佳方式。
我知道如果我将 Lua 代码存储为字符串并调用 lua_dostring,Lua 将在每次调用时重新编译代码。所以需要以某种方式定义函数,并将对这个特定函数的引用包装在 Java 函数对象中。
我考虑过的一种可能性是,在数据加载过程中,当加载器在数据文件中遇到脚本定义时,它会提取此字符串,使用关联对象的唯一 ID 修饰函数名,然后调用 lua_dostring包含完整函数定义的字符串,然后将生成的函数名称包装在 Java 函数对象中。使用 lua_dostring 运行的脚本中声明的函数仍应添加到全局函数表中,对吗?
我只是想知道是否有更好的方法来解决这个问题。我承认我在这一点上对 Lua 的了解是相当肤浅和理论的,所以我可能忽略了一些明显的东西。
【问题讨论】: