环境:Mac + cocos2.2.1
详细可以看教程 %url%
首先提一下的是项目发布那里多了个lua格式的选项,lua的自定义控件应该都要导出成这种格式
1.扩展 CocosStudio 预定义控件
写一个lua文件,格式类似如下:
local tableName = {}
function tableName.CreateCustomNode()
local rootNode = cc.Node:create() -- or others
return rootNode
end
function tableName.GetBaseType()
return "Node"
end
return tableName
只有这两个函数是必要的,当然你的rootNode可以添加各种子节点,但是可以设置的属性只有GetBaseType返回类型的属性
这个类似与ProjectNode, 只不过类型不再局限与Node和Panel
tips:这里只支持C++对象自带的方法,像cc.p之类的就不用试了
写好后把这个文件复制到插件目录,Mac下是~/Library/Application Support/Cocos/CocosStudio2/Addins/LuaScript
windows下据说是 cocos安装目录\Cocos\CocosStudio2\Addins\LuaScript
复制进去后在cocos的自定义控件那里就能看到这个插件了,名字是lua文件名。
tips:使用插件时如果提示 创建对象失败,请检查lua文件,看看有没有cc.p之类的方法
- C# 扩展
这个还没彻底搞懂,只说下知道的
有个示例工程,Mac下在/Library/Application Support/Cocos/CocosStudio2/Samples/Addins 注意/Library不是当前用户下的~/Library,最好拷到外面去
sln我用的是Xamarin Studio打开 http://www.monodevelop.com/
可以先build一下,在 工程目录/bin/下找到生成的库文件,放到~/Library/Application Support/Cocos/CocosStudio2/Addins/ModelExtend下(是当前用户的资源库)
只要一修改/lua/lua/LuaCustomObject.tt就build不成功了
打开cocos在自定义控件里看到新增的两个控件(有个不能用的,可以把/Applications/Cocos/Cocos Studio 2.app/Contents/MacOS/Lua/LuaScript 下的示例插件复制到插件目录(~/Library/Application Support/Cocos/CocosStudio2/Addins/LuaScript)
工程里面是有两个插件+发布格式的代码。其中/DataModel + /Templates + /ViewModel是Custom插件的代码。
/lua是另一个插件的代码。 /PublicExtend是发布格式的代码
以/lua/ViewModel下的LuaCustomObject为例
继承自SpriteObject,所以除去自定义的属性,其他可以设置的属性跟Sprite控件一样, 绑定的lua文件的baseType也必须是Sprite类型
luaFile:绑定的自定义控件代码,Option.LuaScriptFolder是~/Library/Application Support/Cocos/CocosStudio2/Addins/LuaScript
InitNamePrefix():使用控件时新对象的名字前缀
以下是一个自定义属性的格式
//默认值
//属性名
//属于哪个分组,类似与常规、特性
//是否可见
//在该组的位置
public string LabelText //属性存储的名字,用于下面的Model
{
get
{
//调用lua文件里的GetLabelText方法,它的返回值是一个string所以用GetStringValue,其他类型有对应的get、set方法
return luaValueConverter.GetStringValue("GetLabelText");
}
set
{
//调用lua文件里的SetLabelText方法,value是从编辑器读的值
luaValueConverter.SetStringValue("SetLabelText", value);
this.RaisePropertyChanged(() => this.LabelText);
}
}
其他一些类型的属性值可以参考/ViewModel/CustomObject.cs
最后的SetValue是用于复制控件
然后是/lua/DataModel/LuaCustomObjectData
它是定义了刚才用到的属性存储的名字
继承自SpriteObjectData跟ViewModel对应
public string LabelText { get; set; } //属性存储的名字
最后是/lua/lua/LuaCustomObject.tt模板文件
第一行的 inherits=“LuaSpriteObject” 继承自也跟ViewModel对应
CanSerialize是检测data的类型是否是刚才写的LuaCustomObjectData来判断是否序列化
CreateObject跟InitializeObject是生成代码的格式,保存后对比看/lua/lua/LuaCustomObject.tt/LuaCustomObject.cs的InitializeObject函数大概就知道干嘛的了
自定义控件的资料还是太少了,水平有限,仅做抛砖引玉
只要一修改/lua/lua/LuaCustomObject.tt就build不成功了
