【发布时间】:2015-10-08 03:36:07
【问题描述】:
我了解如何将我自己的类公开给 lua,如下所示:
lua_State* L = luaL_newstate();
luaL_openlibs(L);
getGlobalNamespace(L)
.beginClass<Foo>("Foo")
.addConstructor<void(*)(void)>()
.addProperty(/*Property Definition*/)
.addFunction(/*Function Definition*/)
.endClass()
但是,由于我试图将尽可能多的代码移动到 lua 脚本中,因此我希望 lua 类具有 SFML 对象,例如 sf::Text 或 sf::Texture。我没有对 Luabridge 做过很多实验,我不确定我是否能够做这样的事情:
lua_State* L = luaL_newstate();
luaL_openlibs(L);
getGlobalNamespace(L)
.beginClass<sf::Text>("Text")
.addConstructor<void(*)(void)>()
.addFunction("setCharacterSize", &sf::Text::setCharacterSize)
.addFunction("getCharacterSize", &sf::Text::getCharacterSize)
//ETC...
.endClass()
如果这样做不起作用(我担心它可能会),我是否需要创建一个包装类,如下所示:
class Text
{
private:
sf::Text textObj;
public:
void setCharacterSize(const int& size) {textObj.setCharacterSize(size);}
int& getCharacterSize() {return textObj.getCharacterSize();}
}
//Then do the same as the second snippet, without sf::Text but with Text class
更新:
尝试公开sf::Text 类后,尝试执行sf::Text::setPosition 函数时出现错误:
lua_State* L = luaL_newstate();
luaL_openlibs(L);
luabridge::getGlobalNamespace(L)
.beginClass<sf::Text>("Text")
.addConstructor<void(*)(void)>()
.addFunction("setCharacterSize", &sf::Text::setCharacterSize)
.addFunction("getCharacterSize", &sf::Text::getCharacterSize)
.addFunction("setColor", &sf::Text::setColor)
.addFunction("getColor", &sf::Text::getColor)
.addFunction("setFont", &sf::Text::setFont)
.addFunction("getFont", &sf::Text::getFont)
.addFunction("setPosition", &sf::Text::setPosition)
.addFunction("getPosition", &sf::Text::getPosition)
.addFunction("setScale", &sf::Text::setScale)
.addFunction("getScale", &sf::Text::getScale)
.addFunction("setString", &sf::Text::setString)
.addFunction("getString", &sf::Text::getString)
.endClass()
错误信息:
no matching function for call to ‘luabridge::Namespace::Class<sf::Text>::addFunction(const char [12], <unresolved overloaded function type>)’
note: candidate is:
note: template<class MemFn> luabridge::Namespace::Class<T>& luabridge::Namespace::Class<T>::addFunction(const char*, MemFn) [with MemFn = MemFn; T = sf::Text]
【问题讨论】:
-
你试过了吗?我看不出它为什么适用于您自己的课程但不适用于 SFML 的课程的任何理由。
-
@Cornstalks 你见过 SFML 有多大吗?我宁愿确保甚至可以做到这一点,而不是花一天时间为每个 SFML 对象的函数做
addFunction(),以发现我必须创建一个包装类。我不确定的原因纯粹是因为某些函数返回其他类/结构,例如sf::Vector2和sf::Color