- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
(旁注:这是游戏编程)
使用 LuaBind 将整个类绑定(bind)到 Lua 很容易:
class test
{
test()
{
std::cout<<"constructed!"<<std::endl;
}
void print()
{
std::cout<<"works!"<<std::endl;
}
}
//其他地方
module[some_lua_state]
[
class_<test>("test")
.def(constructor<>())
.def("print",&test::print)
];
现在我可以在 Lua 中创建类的实例并使用它:
lua_example.lua
foo = test() //will print "constructed!" on the console
foo:print() //will print "works!" on the console
但是,现在我想将一个特定的测试实例绑定(bind)到 Lua。这将使我能够将对象传递给 Lua,例如Player 类的一个实例并执行如下操作:
Player:SetPosition(200,300)
相对于走艰难的道路并拥有类似的东西
SetPosition("Player",200,300)
相应的 C++ SetPosition 函数需要查找 std::map 以找到播放器。
这甚至可能吗?如果可以,我如何在 LuaBind 中做到这一点?
最佳答案
您不会将类的实例绑定(bind)到 Lua。类的实例只是数据,您可以通过通常的方式将数据传递给 Lua。 C++ 对象虽然很特殊;因为它们是通过 Luabind 注册的,所以您必须使用 Luabind 方法将它们提供给 Lua 脚本。
有几种方法可以将数据提供给 Lua,而 Luabind 涵盖了所有这些方法。例如,如果您有一个对象 x
, 这是指向类 X
的指针在 Luabind 注册,有几种方法可以给 Lua x
.
您可以设置 x
的值成一个全局变量。这是通过 Luabind 的 object
完成的。接口(interface)和 globals
功能:
luabind::globals(L)["NameOfVariable"] = x;
显然,您可以将它放在另一个表中,该表位于另一个表中,等等,可以从全局状态访问。但是您需要确保所有表格都存在。
将此数据传递给 Lua 的另一种方法是调用 Lua 函数并将其作为参数传递。您可以使用 luabind::object
接口(interface)获取函数作为对象,然后使用luabind::call_function
调用它。然后你可以通过 x
作为函数的参数。或者,如果您更喜欢 lua_pcall
-style 语法,可以换行 x
在luabind::object
并用 luabind::object::push
将其压入栈中.
关于c++ - LuaBind:如何将类的特定实例绑定(bind)到 Lua?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7483809/
我刚刚开始使用 Luabind,并尝试运行在 http://www.rasterbar.com/products/luabind/docs.html#calling-lua-functions 指定的
我在理解如何通过 luabind 正确使用协程时遇到一些问题。有一个模板函数: template Ret resume_function(object const& obj, ...) 其中 (Ret
我对 Luabind 包装器如何在没有 lua_State *L 的情况下传递函数感兴趣。并且不使用 Lua 堆栈。 Luabind 如何: 计算函数参数? 将函数参数链接到 Lua 堆栈? 链接这些
我有一个 C++ 类,我想通过全局变量在 lua 脚本中授予访问权限,但是当我尝试使用它时,出现以下错误: terminate called after throwing an instance of
我在使用 luabind 时遇到了问题。我定义了一个 std::map 来分配在 lua 中创建的对象。我以这种方式将这张 map 发布为 lua 中的全局对象: luabind::globals(L
在一个名为 Test_Class 的类中,我有一个函数: shoot_a_bullet(int damage) { cout > x; lua_State *myLuaState =
我在 Lua 中创建表并将它们存储为 Luabind 对象。然后,我希望调用存储在这些表之一中的函数,所以我会做这样的事情 data["onPrimaryFire"](player, x, y, a)
我最近一直在学习 Luabind,目的是将其集成到我们的软件中。我遇到了几个问题,我一直在查看 Luabind 的 Rasterbar 软件文档,但未能解决。基本上,我公开了一个以字符串和抽象基类作为
我想创建一个具有动态属性的类。例如: class MyClass { public: int GetValue(string str) { return smap[st
我想问一个关于其中发生的特定事件的问题,而无需深入探讨我正在从事的大型 multimap 书馆项目的太多无关细节。我正在使用 Luabind 使我的 C++ 代码与我的 Lua 代码接口(interf
我正在尝试从类中导出静态字段: class Foo { const static int Var; }; // luabind module: .def_readonly("Var", &Foo
我试图在 Visual Studio 2010 中使用 Lua + Luabind 制作一些 HelloWorld。我从 here 下载了 Lua src。并将其源文件添加到项目中。然后我下载并添加了
我使用的是来自 Ryan Pavlik 主发行版的 luabind 0.9.1 和 Lua 5.1,Win XP SP3 上的 cygwin + 最新补丁 x86,boost 1.48,gcc 4.3
我目前在使用 Luabind 将 Lua 脚本 AI 与 C++ 游戏交互时遇到问题。 我在一个循环中调用一个更新函数(每帧一次),这个函数从 Luabind 中注册的 C++ 函数中检索信息。 我的
我正在尝试为我的项目编译 Luabind,但收效甚微。我有 lua 目录(包含 src、makefile 等)作为 luabind 的兄弟。我将 LUA_PATH 设置为/my/dirs/lua 文件
我有一些使用 Luabind 的代码,如果它存在于 _G 表中,我需要执行一个函数(来自 C++),否则什么都不做。如何检测_G中是否存在函数? 最佳答案 这样的事情应该工作: if (luabind
我想向 Lua 等公开 Java 类。对于 C/C++,有 luabind 项目。但我还没有找到 Java 的类似内容。Java 有没有类似 luabind 的项目? 最佳答案 也有一些可用于 JAV
如何追踪我的合规订单? (这样我就可以重新订购) 我的问题:我正在运行 Visual Studio 2012 编写 C++ 应用程序。我使用 LuaBind 将脚本系统 Lua 绑定(bind)到我的
我正在学习 luabind 并尝试使用 luabind::object 从 C++ 访问 Lua 中的变量。 当我将一个 int 分配给一个“对象”时,编译失败了。 代码: int main() {
luabind 文档说要从 C++ 调用 Lua 派生的虚拟成员,您可以创建一个派生自 luabind::wrap_base 的包装类,然后像这样调用该函数: class BaseWrapper :
我是一名优秀的程序员,十分优秀!