国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - 詳解cocoscreater預制體prefab

詳解cocoscreater預制體prefab

2022-03-02 16:27wjysg8408982 js教程

這篇文章主要介紹了詳解cocoscreater預制體prefab的作用和使用方法,對此感興趣的同學,可以回去試一試

預制體prefab

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

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

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

詳解cocoscreater預制體prefab

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

詳解cocoscreater預制體prefab

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

詳解cocoscreater預制體prefab

預制體的作用

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

本質上來說就是使用預制體創(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;
// 判斷對象池內是否有有閑置對象
if(this.nodePools.size() > 0){
	  // 使用get方法獲取閑置對象,這時候把存放批量創(chuàng)建節(jié)點的對象池nodePools當作參數傳入get里,之后可以在預制體綁定的腳本內(假設是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); 取出對象池內的節(jié)點之后,在預制體的腳本內先定義一個對象池接收上面通過get傳入的對象池

/*這樣當使用 nodePool.get() 獲取節(jié)點后,
就會調用預制體腳本 nodePrefab.ts 里的 reuse 方法,完成點擊事件的注冊。
另外 cc.NodePool.get() 可以傳入任意數量類型的參數,這些參數會被原樣傳遞給 reuse 方法*/
// 所有我們要在實現一個reuse系統(tǒng)回調方法
 reuse(EnemyPools:cc.NodePool) {
 		//  獲取到get 中傳入的管理類實例
        this.EnemyPools = EnemyPools;
 }
 
// 寫一個回收對象的函數 
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)這樣的掛載方式,就能加載出

// 因為下面的回調函數無法使用this,所以要定義一個變量傳入this
let m_this = this;
/* 使用cc.loader.loadRes動態(tài)加載 Prefab,先在在assets文件夾下創(chuàng)建一個resources文件夾,然后把預制體資源放到下面
第一個參數是resources下面預制體的絕對路徑,這樣預制體就會被獲取到第二個function類型參數的prefab參數里*/
[cocos文檔官網](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的詳細內容,更多關于cocoscreater prefab的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/wjysg8408982/article/details/108247214

延伸 · 閱讀

精彩推薦
  • js教程五種使 JavaScript 代碼庫更干凈的方法

    五種使 JavaScript 代碼庫更干凈的方法

    今天向大家介紹5種使JavaScript代碼庫更干凈的方法,一起來看一下都有哪些吧!...

    Mason程10682021-12-29
  • js教程確保JavaScript 安全的五大做法

    確保JavaScript 安全的五大做法

    如果你運行交互式網站或應用程序,JavaScript 安全性是重中之重。 從程序錯誤和不安全的用戶輸入到惡意攻擊,有很多事情可能會出錯。...

    粵嵌教育8792022-01-11
  • js教程js事件模型與自定義事件實例解析

    js事件模型與自定義事件實例解析

    JavaScript一個最簡單的事件模型,需要有事件綁定與觸發(fā),還有事件刪除。本文將對其具體實現代碼進行解析,需要的朋友一起來看下吧...

    caihg5682021-12-15
  • js教程玩轉 Mockjs,前端也能跑得很溜

    玩轉 Mockjs,前端也能跑得很溜

    mockjs作用就是,生成隨機模擬數據,攔截 ajax 請求,可以對數據進行增刪改查。在生成數據時,我們就需要能夠熟練使用 mock.js 的語法。...

    前端人4852022-01-05
  • js教程原生js實現2048小游戲

    原生js實現2048小游戲

    這篇文章主要為大家詳細介紹了原生js實現2048小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    一個21歲的老同志5592022-02-13
  • js教程js制作提示框插件

    js制作提示框插件

    這篇文章主要介紹了js制作提示框插件的方法,幫助大家更好的理解和使用js,感興趣的朋友可以了解下...

    lanshanxiao10262021-12-18
  • js教程如何在微信小程序中使用less詳解(最優(yōu)方式)

    如何在微信小程序中使用less詳解(最優(yōu)方式)

    這篇文章主要給大家介紹了關于如何在微信小程序中使用less(最優(yōu)方式)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的...

    九旬10212022-02-16
  • js教程JavaScript實現跟隨鼠標移動的盒子

    JavaScript實現跟隨鼠標移動的盒子

    這篇文章主要為大家詳細介紹了JavaScript實現跟隨鼠標移動的盒子,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    搬磚大法10882022-01-10
主站蜘蛛池模板: 特级毛片在线 | 日韩激情在线 | 视频在线一区二区 | 欧美日韩中文在线观看 | 高清精品一区二区 | 国产精品高潮呻吟久久 | 久久三区 | 色香阁99久久精品久久久 | 狠狠干2018 | 精品一区二区不卡 | 99视频精品| 亚洲精品资源在线观看 | 国内自拍偷拍视频 | 国产一区高清 | 日韩一区二区在线免费 | 国产精品亚洲综合 | а天堂中文最新一区二区三区 | 日韩一区在线播放 | 一级片免费视频 | 日本黄色大片免费 | 91中文字幕在线 | 高清在线一区 | 色婷婷中文字幕 | 激情久久久久 | 97久久久 | 一区二区蜜桃 | 特黄特色大片免费视频观看 | 欧美色影院 | 亚洲大片免费观看 | 一级片在线观看 | 久草成人网 | 亚洲国产中文字幕 | 伊人中文字幕 | 中文字幕国产日韩 | 香蕉av777xxx色综合一区 | 污视频在线观看免费 | 日韩视频在线一区 | 欧美成人一区二免费视频软件 | 黄毛片| 99中文字幕 | 日韩免费视频一区二区 |