1. 程式人生 > >cocos Creator 製作列表並新增監聽

cocos Creator 製作列表並新增監聽

  需要的控制元件就是一個Scrollview,子項做成一個預製檔案(在場景中編輯好,然後拖入下方的資源目錄就可以生成一個預製檔案)。

設定Scrollview的屬性,每一個屬性滑鼠放上去會有對應的中文,根據需要設定就可以了,content這裡將我們的一個layout拖進去,就可以實現拖動layout。creator的layout區別於studio,這裡的layout功能真的是太強大了,自帶列表屬性。


然後寫layout下的繫結指令碼,在properties下新增預製子項的屬性,

itemPrefab: { default:null, type:cc.Prefab
},

在creator中會看到


將我們之前的預製檔案拖進去。

在指令碼中合適的位置去生成列表,通過克隆也就是cc.instantiate()

for (let i = 0; i < data.length; i++) { var item = cc.instantiate(this.itemPrefab); item.setAnchorPoint(cc.p(0,0)); item.idx = i; //添加回調 item.on(cc.Node.EventType.TOUCH_END
, self.btnItemClickHandler, self); //設定型別 item.getComponent("MailItem").setType(type); this.node.addChild(item); layoutHeight += item.height; } this.node.height = layoutHeight;}

這樣就初步生成了一個列表,我在上邊會去根據子項的數量更改layout的高度,因為我發現不更改好想layout的高度不會隨著專案的數量而改變從而只能看到一版,所以我使用了這樣的方法,也是因為自己剛接觸這些,可能會有更好的方法或者有什麼的我沒有去規避。

    當我們想要通過點選事件來改變列表的專案,可以移除節點上的所有專案從新呼叫上邊的方法:

//清除所有子項 clearItems() { this.node.removeAllChildren(); },

(ps:陣列的長度計算可以直接.length得到,陣列也是用[]包圍而不是{})

有點選事件就有有監聽,creator兩種發事件方式,emit和dispatcherEvent。個人覺得這個冒事件用起來很不舒服,比如emit發事件。

發:this.node.emit("IWANT");

監聽:this.node.on("IWANT",this.onWantHandler,this);(推薦使用成員函式,如果是閉包可能會有作用域的問題)

然後去監聽他就還要同一個節點才能監聽到,就是說在第一個元件裡邊傳送訊息,我在第二個元件裡邊想要去監聽觸發回撥,我還要在第二個元件裡邊去拿到第一個元件,這樣才能監聽到。

還有一個是dispatchEvent,這個東西冒出來的事件就只能他或者他的爸爸爺爺們去監聽,兒子是聽不到的,也就是說它只會一層層向上傳遞,就算是他叔叔都監聽不到。

所以,派發事件的時候要多多注意了,稍有不慎就監聽不到事件。

另外,我之前做東西的時候喜歡把東西放一堆一堆的,就是我今天在做預製的時候,創了一個空節點,把該有的一些東西放進去,然後佈局的時候位置總是不對,後來發現空節點的size是(0,0),難受。