應(yīng)用情景
- 場景中有大量節(jié)點需要添加某種組件见转。
- 場景中有大量節(jié)點需要設(shè)置某種組件的屬性。
- 將拖拽組件一個一個的手動附加到需要的節(jié)點上褥影,再一個一個設(shè)置這些屬性會非常繁瑣池户。
應(yīng)用舉例
場景中有大量節(jié)點需要添加拖拽組件(geoDraggable),
拖拽組件
并且還要把這些拖拽組件的lockTarget凡怎、dragMoveEvents校焦、dragEndEvents設(shè)置為相同的。
拖拽組件的屬性
- 假設(shè)場景中已經(jīng)有一個節(jié)點refinedNode统倒,已經(jīng)附加了拖拽組件寨典,并且配置好了各項屬性。
- 現(xiàn)在要為節(jié)點rawNode下的所有攜帶標記“drag=a”的子孫節(jié)點添加拖拽組件房匆,并且將屬性:lockTarget耸成、dragMoveEvents、dragEndEvents浴鸿,設(shè)置為與refinedNode相同井氢。
- 在游戲開始處(或需要的時候),使用下列代碼岳链,就能完成組件的附加和配置花竞,不用在編輯器中手動操作:
var Utils = require('geoUtils');
// 定義要獲取的組件
var Draggable = require('geoDraggable');
// 或者直接用組件類名(文件名)
var Draggable = 'geoDraggable';
// 獲得已配置好的組件
var refinedCom = refinedNode.getComponent(Draggable);
// 構(gòu)建要復(fù)制的屬性承載結(jié)構(gòu)
var attrs = Utils.obj.getAttrs(refinedCom, ['lockTarget', 'dragMoveEvents', 'dragEndEvents']);
// 為rawNode的子孫附加拖拽組件并設(shè)置屬性
Utils.node.setComponentAttrs(
rawNode, // 以該節(jié)點為起點執(zhí)行操作
Draggable, // 目標是拖拽組件
attrs, // 要將拖拽組件的屬性依據(jù)attrs進行設(shè)置
true, // 考慮(遍歷)rawNode到子孫節(jié)點
'drag', // 只關(guān)注攜帶drag=a標記到節(jié)點
'a', // 只關(guān)注攜帶drag=a標記到節(jié)點
true // 若遍歷到的節(jié)點沒有Draggable組件就自動附加
);
方法詳解
- 方法原型:
/**
* 設(shè)置一個節(jié)點(或包含其子孫節(jié)點)某類組件的指定屬性值。
*/
setComponentAttrs(
node, // 被設(shè)置的節(jié)點
componentTypeOrName, // 目標組件類型或名稱
attrs, // 要設(shè)置的組件屬性名及值
includeHierarchy, // 是否考慮node子孫
markNameInHierarchy, //列為考慮對象的子孫的標記名
markValueInHierarchy, // 列為考慮對象的子孫的標記值
addIfNotExists, // 若組件不存在是否自動添加,
validateFunc // 驗證是否對遍歷到到節(jié)點實施操作
)
延展閱讀
- 更方便的操作方式批量配置組件