mygui与luaplus的绑定

1.CEGUI里loadlayout的时候,有关于event的property项,内容一个是event名,另一个是lua脚本里的functionname.event事件来后fireEvent,依次调用event里的SlotContainer函数指针容器内的SubscriberSlot,而lua对应的应该是ScriptFunctor模板转换的FunctorCopySlot,ScriptFunctor重载了operator(),operator()调用的就是scriptModule里的executeScriptedEventHandler,

scriptModule可以是luaPlus也可以是tolua++

2.MyGUI如何实现类似的功能,与CEGUI不同,CEGUI所有Window都继承于EventSet,由一个事件名称去索引出Event,MyGUI用的是delegate,暂时的想法是loadlayout的时候因为没有event的property项,所以只能用userString项代替了,还好新版的支持eventAddUserString的delegate,读到自定义特定的userStirng事件时,将delegate加到自己的一个luaMgr类似的类函数上,同时将一些delegate回传回来的参数转到lua里

xml:skin="Button"position="2514013030"name="first_btn">skin="Button"position="1701459525"name="kick_me">lua:functionBtnClick()print(arg0);print("BtnClick\n");endfunctionKickMe()print(arg0);print("kickme\n");endc++:voidDemoKeeper::onAddUserString(MyGUI::WidgetPtr_sender,conststd::string&_key,conststd::string&_value){//printf("%0x_%s_%s",_sender,_key.c_str(),_value.c_str());if(_key=="Clicked"){_sender->eventMouseButtonClick+=MyGUI::newDelegate(this,&DemoKeeper::lua_doClick);}}voidDemoKeeper::lua_doClick(MyGUI::WidgetPtr_sender){g_luaState->GetGlobals().SetString("arg0",_sender->getName().c_str());std::stringuserString=_sender->getUserString("Clicked");g_luaState->DoString(userString.c_str());}

lua

相关推荐