最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解cocoscreater預制體prefab

 更新時間:2021年04月15日 09:31:35   作者:wjysg8408982  
這篇文章主要介紹了詳解cocoscreater預制體prefab的作用和使用方法,對此感興趣的同學,可以回去試一試

預制體prefab

什么是預制體,字面意思,還未使用前預先制作好的節(jié)點資源,屬性等同于普通節(jié)點,可以看做一個預先制作還沒展示出來的普通的節(jié)點

怎么創(chuàng)建預制體

1.在層級管理器處先創(chuàng)建普通的節(jié)點,然后把這個節(jié)點拖拽到資源管理器的assets文件夾下,出于方便管理會統(tǒng)一建立一個Prefab文件夾下統(tǒng)一存放預制體

雙擊預制體節(jié)點可以看到它呈現(xiàn)藍色,這時候就可以刪除還留在場景場景里的節(jié)點,需要使用該節(jié)點時,通過預制體創(chuàng)建

這時候可以看到屬性檢查器里的屬性,和普通節(jié)點一致

預制體的作用

1.批量創(chuàng)建相同類型的節(jié)點

本質(zhì)上來說就是使用預制體創(chuàng)建一個模板,然后通過復制這個預制體模板批量創(chuàng)建

第一步:批量創(chuàng)建節(jié)點放入對象池

 @property(cc.Prefab)
 prefab:cc.Prefab = null;
 // 在屬性管理器上聲明一個預制體類型,用于在屬性管理器里掛載定義好的預制體
 
 @property(cc.NodePool)
 nodePools:cc.NodePool = null;
 // 聲明一個對象池用于存放通過預制體創(chuàng)建對象,一次性使用預制體創(chuàng)建足夠用的相同類型節(jié)點,然后放入對象池,需要使用時拿出來,不需要時放回,避免長時間大量創(chuàng)建和銷毀節(jié)點

 for(let i:number = 0; i < 100; i++){
 	//創(chuàng)建100個節(jié)點
 	let node:cc.Node = cc.instantiate(this.prefab); 
    this.nodePools.put(node); 
    // 將每個節(jié)點放入對象池
 }

第二步:需要使用時直接拿出使用即可

let node:cc.Node = null;
// 判斷對象池內(nèi)是否有有閑置對象
if(this.nodePools.size() > 0){
	  // 使用get方法獲取閑置對象,這時候把存放批量創(chuàng)建節(jié)點的對象池nodePools當作參數(shù)傳入get里,之后可以在預制體綁定的腳本內(nèi)(假設是nodePrefab.ts),進行放回對象池操作
      node = this.nodePools.get(this.nodePools);
}else{
	 // 如果沒有閑置對象就通過預制體創(chuàng)建
      node = cc.instantiate(this.prefab);
}
//  掛載到父節(jié)點上,等同于手動拖拽掛載
    this.node.addChild(node);

第三步:使用完之后返還節(jié)點

// 假設這是上面提到的預制體腳本nodePrefab.ts腳本

nodePools:cc.NodePool = null;
// 上面通過 node = this.nodePools.get(this.nodePools); 取出對象池內(nèi)的節(jié)點之后,在預制體的腳本內(nèi)先定義一個對象池接收上面通過get傳入的對象池

/*這樣當使用 nodePool.get() 獲取節(jié)點后,
就會調(diào)用預制體腳本 nodePrefab.ts 里的 reuse 方法,完成點擊事件的注冊。
另外 cc.NodePool.get() 可以傳入任意數(shù)量類型的參數(shù),這些參數(shù)會被原樣傳遞給 reuse 方法*/
// 所有我們要在實現(xiàn)一個reuse系統(tǒng)回調(diào)方法
 reuse(EnemyPools:cc.NodePool) {
 		//  獲取到get 中傳入的管理類實例
        this.EnemyPools = EnemyPools;
 }
 
// 寫一個回收對象的函數(shù) 
hit () {
	// 判斷對象池是否存在
    if(this.nodePools){
    	// 存在放回當前節(jié)點
    	this.nodePools.put(this.node);
    }else{
    	// 否則直接銷毀節(jié)點
      	this.node.destroy();
    }
}

2.提前制作一些特定時機才需要展示出來的節(jié)點

比如提示框之類的

 // 創(chuàng)建一個預制體用于屬性檢查器里掛載定義好的預制體
 @property(cc.Prefab)
  testPrefab:cc.Prefab = null;
	
	// 需要展示這個節(jié)點的時候直接像上面一樣復制通預制體創(chuàng)建
	let node = cc.instantiate(this.testPrefab);
	// 掛載到父節(jié)點上
    this.node.addChild(node);
    

上面都是使用掛載,下面使用一種動態(tài)加載,這樣可以不通過 @property(cc.Prefab)這樣的掛載方式,就能加載出

// 因為下面的回調(diào)函數(shù)無法使用this,所以要定義一個變量傳入this
let m_this = this;
/* 使用cc.loader.loadRes動態(tài)加載 Prefab,先在在assets文件夾下創(chuàng)建一個resources文件夾,然后把預制體資源放到下面
第一個參數(shù)是resources下面預制體的絕對路徑,這樣預制體就會被獲取到第二個function類型參數(shù)的prefab參數(shù)里*/
[cocos文檔官網(wǎng)](https://docs.cocos.com/creator/manual/zh/scripting/load-assets.html?h=assets)
cc.loader.loadRes("assets/OptionBox", function (err, prefab) {
if(!prefab){
    cc.log("預制體為空");
}
var newNode = cc.instantiate(prefab);
if(!newNode){
    cc.log("節(jié)點為空");
}
// 添加為當前節(jié)點的子節(jié)點
m_this.node.addChild(newNode);

以上就是兩種常規(guī)使用預制體的方案,例如批量創(chuàng)建敵人,子彈使用的是第一種,第二種在有反復使用的場景,或者特定情況觸發(fā)的提示框也可以做成預制體

以上就是詳解cocoscreater預制體prefab的詳細內(nèi)容,更多關(guān)于cocoscreater prefab的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JavaScript樹形數(shù)據(jù)結(jié)構(gòu)處理

    JavaScript樹形數(shù)據(jù)結(jié)構(gòu)處理

    這篇文章主要介紹了JavaScript樹形數(shù)據(jù)結(jié)構(gòu)處理,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • 如何通過vscode運行調(diào)試javascript代碼

    如何通過vscode運行調(diào)試javascript代碼

    這篇文章主要介紹了如何通過vscode運行調(diào)試javascript代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • js隨機生成一個驗證碼

    js隨機生成一個驗證碼

    這篇文章主要為大家詳細介紹了js隨機生成一個驗證碼的具體方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • uni-app動態(tài)修改導航欄標題簡單步驟

    uni-app動態(tài)修改導航欄標題簡單步驟

    uniapp作為一款開源軟件,可以做到一端多用,不過也有局限,在開發(fā)中有時候需要動態(tài)的去修改標題,下面這篇文章主要給大家介紹了關(guān)于uni-app動態(tài)修改導航欄標題的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • JavaScript計算兩個日期時間段內(nèi)日期的方法

    JavaScript計算兩個日期時間段內(nèi)日期的方法

    這篇文章主要介紹了JavaScript計算兩個日期時間段內(nèi)日期的方法,涉及javascript操作時間的技巧,需要的朋友可以參考下
    2015-03-03
  • js的map、flatMap和find、filter的使用詳解

    js的map、flatMap和find、filter的使用詳解

    map和flatMap都是返回一個新數(shù)組,map不會改變數(shù)組長度,flatMap可以改變長度,find和filter都是過濾操作,find只會返回第一個找到的值,而filter會返回全部符合要求的對象
    2024-12-12
  • bootstrap表格內(nèi)容過長時用省略號表示的解決方法

    bootstrap表格內(nèi)容過長時用省略號表示的解決方法

    這篇文章主要介紹了bootstrap表格內(nèi)容過長時用省略號表示的解決方法,需要的朋友可以參考下
    2017-11-11
  • js如何驗證密碼強度

    js如何驗證密碼強度

    這篇文章主要為大家詳細介紹了js如何驗證密碼強度,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 使用canvas進行圖像編輯的實例

    使用canvas進行圖像編輯的實例

    下面小編就為大家?guī)硪黄褂胏anvas進行圖像編輯的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • JavaScript實現(xiàn)數(shù)組去重的十種方法分享

    JavaScript實現(xiàn)數(shù)組去重的十種方法分享

    去重是開發(fā)中經(jīng)常會碰到的一個熱點問題,這篇文章主要介紹了JavaScript中實現(xiàn)數(shù)組去重的10種方法,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-11-11

最新評論

清镇市| 来宾市| 青铜峡市| 鄂托克前旗| 砀山县| 尉氏县| 怀化市| 定南县| 嘉黎县| 托克托县| 大渡口区| 如皋市| 大化| 香港| 邵东县| 海原县| 威远县| 叙永县| 嘉峪关市| 海淀区| 绥棱县| 全椒县| 屯昌县| 中山市| 林州市| 沽源县| 屏南县| 武穴市| 酉阳| 喀什市| 越西县| 凌源市| 闻喜县| 巴楚县| 利辛县| 西乌| 赣州市| 门头沟区| 新余市| 砀山县| 红安县|