首先是这样的,我用Cocos Studio2.2.6和frameworkd3.6进行开发。开发语言是C++,目前我自己用C++扩展了一个控件,控件的基类是ui::Widget,但问题来了,我要怎么把这个控件在Cocos Studio2.2.6中显示出来,也就是说我的自定义控件如何出现在Cocos Studio2.2.6的编辑区中。我找了Cocos Studio的插件开发,比较接近2.2.6的只有http://cn.cocos2d-x.org/tutorial/show?id=2650,这边文章通篇不提C++,只有Lua和C#,于是我整个人都不好了,如果我只想用C++开发怎么办?官方的人出来解释一下吧。
同求帮顶!我只想问用lua和c#写好扩展并导出lua文件后,能否被c++导入?
目前2.x版本, 还没有开放C++的扩展接口. 所以暂时没有办法直接继承C++编写的控件.
C++里面, 可以通过Lua接口, doFile, 直接执行导出的lua文件, 然后就相当于把导出的Lua文件给执行了一遍, 获取根节点就好了. 另外也可以自己自定义导出的格式, 扩展的控件可以导出到csb文件, 这样在C++中直接加载csb文件, 更方便.
对于你说的自定义导出格式有没有资料可以?
是啊,为啥引擎都是c++的,一个工具没有c++支持呢
因为cocos studio是Mono做的吧,基于C#语言的
非常麻烦。必须cocos v2.3.2,因为之前版本的编辑器对lua控件支持不全。
1.Addins.Sample编写带属性的插件,主要用lua实现界面编辑器上的效果。
2.修改Addins.Sample的CustomSerializer.cs自定义导出
public static extern int ConvertToBinByFlat(string xmlFileName, string flatbuffersFileName);
public string Serialize(PublishInfo info, IProjectFile projFile)
{
//csd fullpath
//csd 路径
string src = info.SourceFilePath;
//des fullpath
//csd转换后的路径
FilePath desFilePath = info.DestinationFilePath;
//resources fullpath
//当前项目资源路径
string res = Services.ProjectOperations.CurrentSelectedSolution.ItemDirectory;
//serialize code
//序列化代码写在下面
ConvertToBinByFlat(src, desFilePath);
return "";
}
- 在cocos2d里FlatBuffersSerialize.cpp文件加
extern “C”
{
#ifdef WIN32
CC_DLL int __stdcall ConvertToBinByFlat(const char* xmlFileName, const char* flatbuffersFileName)
{
FlatBuffersSerialize* fb = FlatBuffersSerialize::getInstance();
std::string s = fb->serializeFlatBuffersWithXMLFile(xmlFileName, flatbuffersFileName);
return 0;
}
#endif // WIN32
}
再到WidgetReader里随便找个控件拷贝一份修改成你的自定义控件。
FlatBuffersSerialize::FlatBuffersSerialize()函数里加入你的控件初始化
CREATE_CLASS_NODE_READER_INFO(你的控件名Reader);
4.在CSLoader::CSLoader()里加入你的控件
CREATE_CLASS_NODE_READER_INFO(你的控件名Reader);
5.编译libcocos2d.dll改名为libcocos2d_extend.dll放到cocos安装目录下。