cocos2dx js 多層級列表

2021-07-11 15:18:44 字數 3596 閱讀 8181

先上圖:

如上圖所示,多層級列表可以展開其子層級列表.

cocos2dx中有乙個tableview,使用它製作列表是乙個比較好的選擇.

一般使用tableview製作的都是一級列表,這裡利用tableview來製作乙個多層級列表.

下面直接上**:

檔案commonlist.js:

/*** 多級列表

* 預設只渲染一級列表項

* 渲染多級時,子列表資料必須放在sub_items陣列中,如 ,...]}

* 且將enable_sub_item設定為true,該值預設為false

*/var commonlist = cc.node.extend(,

init : function(view_size) ,

/*** 載入項資源,必須在loaddata之前呼叫

* @param res

* @param width

* @param height

*/additemprefab : function(res, width, height) ,

/*** 設定外部委託,必須在loaddata之前呼叫

* @param delegate

* ->delegate.setitem(node, data)            [必須]

* ->delegate.onitemclick(node, data)        [可無]

* ->delegate.onitempressdown(node, data)    [可無]

* ->delegate.onitempressup(node, data)      [可無]

*/setdelegate:function (delegate) ,

enablesubitem : function(tag) ,

//print

printcontainer : function () ,

reloaddata : function (dataset)

this._sourcedata = dataset;

this.resetdata(this._sourcedata, 0);

this.loaddata();

},loaddata: function() ,

getitemdata : function(dataset)

for(var i = 0, len = dataset.length; i < len; ++i) }},

resetdata : function(dataset, itemtype)

for(var i = 0, len = dataset.length; i < len; ++i) }},

//tv

getcontainer : function() ,

getcontentoffset: function () ,

setcontentoffset: function (offset_pos) ,

dequeuecell:function (itemtype) else

}if(ind == -1) else }},

closeitem: function (data) }},

//-----------------------table view callback begin-------------------------//

//ok

numberofcellsintableview: function (table) ,

//ok

tablecellsizeforindex: function (table, idx)

return size;

},//ok

tablecellatindex: function (table, idx)

var res_item = this._itemprefab[itemtype];

if(!res_item)

var cell = this.dequeuecell(itemtype);

if(!cell)

if(this._viewdelegate !== null && this._viewdelegate.setitem)

return cell;

},//ok

tablecelltouched:function (table, cell)

var reload = false;

if(this.enable_sub_item)

}else

}//if(this._viewdelegate !== null && this._viewdelegate.onitemclick)

if(reload) else }},

//ok

tablecellhighlight:function(table, cell)

},//ok

tablecellunhighlight: function(table, cell)

},//ok

tablecellwillrecycle: function(table, cell)

//-----------------------table view callback end-------------------------//

});使用示例:

var list_size = cc.size(560, 800);

var common_list = new commonlist(list_size); 

list_layer.addchild(common_list);

設定項資源

common_list.additemprefab(res.uiitemprefab_1, 551, 54);

common_list.additemprefab(res.uiitemprefab_2, 551, 54);

設定委託

var list_delegate = {};

list_delegate.setitem = function (node, data) else if(level == 1)

};list_delegate.onitemclick = function (node, data) ;

list_delegate.onitempressdown = function (node, data) ;

list_delegate.onitempressup = function (node, data) ;

common_list.setdelegate(list_delegate);

//啟用多層級,否則它只是一級列表

common_list.enablesubitem(true);

載入資料, 注意資料格式限制,子項必須包含在 sub_items陣列中

var list_dataset = [

,,,]},

]},,,]},

,]}];

common_list.reloaddata(list_dataset);

至此,恭喜你建立出多層級列表.

cocos2dx js灰化高亮等等

給節點設定自定義的shader cc.node.prototype.setcustomshader function vsh,fsh,enable 判斷是不是widget if this.getvirtualrenderer null this.getvirtualrenderer getsprit...

cocos2dx js更換遊戲引擎版本(mac)

專案建立之初使用cocos2dx js 3.16的版本,但專案使用android studio 打包出來的apk包在部分機型上安裝不了,但公司其他專案使用cocos2dx js 3.15版本是沒問題的,於是將就需要首先切換電腦遊戲引擎版本。1 開啟終端,cd 到cocos2dx js 1.15引擎包...

cocos2dx js 實現自定義富文字

在做遊戲的時候,有乙個特殊的需求引擎沒有直接提供。一段label有一部分是其他顏色,例如 乙隻 優雅 的 攻城獅 上面這個label,一般想到的常規方式是 用四個label拼接,放到不同的位置。其實richtext是提供了這種功能的,用設定好的四個richelementtext就能實現。但是相對來說...