LuaPlus 从C++操作表
LuaPlus manipulate table from C++
在本指南中,创建函数是为了向表中添加怪物并降低表中怪物的生命值。
您可以轻松地从 lua 脚本中使用两个函数,如下所示:
monster = objectMgr:CreateObject("HotMamma",5);
monster:Hurt( 1 ) --decrease health by 1
--or
objectMgr:CreateObject("HotMamma",5);
monster = objectMgr:GetObject(0)
monster:Hurt( 1 )
但是我如何从C++端调用这些函数呢?
我的意思是原始的:ObjectMgr::CreateObejct()
,ObjectMgr::GetObjectByIndex()
和Monster::Hurt()
我花了 8 个多小时试图弄清楚这一点!但没有任何效果。:/
我最好的尝试可能是这样的:
// CreateObject modified to return pMonster and accept normal arguments
MonsterPtr monster = objectMgr.CreateObject(pState, "HotMamma", 5);
monster.Hurt( 1 );
这给了我以下错误:
类 "std::tr1::shared_ptr" 没有成员 "Hurt"
从查看文件Monster.hpp
:
class Monster
{
// ...
public:
Monster( std::string& name, int health );
void Hurt( int damage );
void Push( LuaPlus::LuaState* pState );
int Index( LuaPlus::LuaState* pState );
int NewIndex( LuaPlus::LuaState* pState );
int Equals( LuaPlus::LuaState* pState );
};
typedef std::shared_ptr<Monster> MonsterPtr;
MonsterPtr
是一个C++ shared_ptr
.因此,在语法上,您必须使用->
运算符调用 Monster 的成员,如下所示:
// ...
monster->Hurt(1);
编辑:似乎还涉及更多的设置。方法签名:
int ObjectMgr::CreateObject( LuaPlus::LuaState* pState )
仅接受LuaState *
作为其唯一参数,并且不会重载,因此示例中的上述调用将不起作用。您所要做的就是在调用之前将参数推送到堆栈上。设置和用法应如下所示:
LuaObject _G = pState->GetGlobals();
LuaObject name, life;
name.AssignString(pState, "HotMamma");
life.AssignInteger(pState, 5);
_G["objectMgr"].Push();
name.Push();
life.Push();
MonsterPtr monster = objectMgr.CreateObject(pState);
monster->Hurt(1);
相关文章:
- 使用 XOR 操作仅使用 2 个指针反转链表
- C++中最接近 Lua 表操作的东西是什么?
- 在 "CodePad" 中执行链表操作时转储的核心(这是一个在线C++编译器)
- 链表回推操作中需要'back pointer'
- 操作链表的函数出现逻辑错误
- 链表操作C++
- 表操作错误
- 为什么单向链表的 Next() 操作应该用关键部分来保护
- LuaPlus 从C++操作表
- 无锁双链表的原子操作
- 链表操作,检索数据 c++ 的问题
- 尝试仅通过操作指针对链表进行排序
- 使用链表进行堆栈弹出操作
- 在C++中创建用于字符串操作的哈希表
- C++cgi脚本获取空的环境变量作为表单的操作
- 使用c++在链表中搜索操作
- c++中复杂度为0(1)的单链表操作
- 链表操作的段错误
- 仅通过操作指针交换链表中的相邻节点
- c++链表操作