public override void update(float elapsedTime) { base.update(elapsedTime); // 先更新所有节点 foreach (var item in mNodeList) { if (!item.Value.mDeadNode) { item.Value.update(elapsedTime); } } if (mTimer.tickTimer(elapsedTime)) { LIST(out List <DTreeNode> deadList); foreach (var item in mNodeList) { if (item.Value.mDeadNode) { deadList.Add(item.Value); } } // 移除已经死亡的节点 int count = deadList.Count; for (int i = 0; i < count; ++i) { clearNode(deadList[i]); } UN_LIST(deadList); // 从根节点开始遍历 if (mRootNode != null && mRootNode.condition()) { mRootNode.execute(); } } }
public override void update(float elapsedTime) { base.update(elapsedTime); // 先更新所有节点 foreach (var item in mNodeList) { if (!item.Value.mDeadNode) { item.Value.update(elapsedTime); } } if (mTimer.tickTimer(elapsedTime)) { List <DTreeNode> deadList = mListPool.newList(out deadList); foreach (var item in mNodeList) { if (item.Value.mDeadNode) { deadList.Add(item.Value); } } // 移除已经死亡的节点 foreach (var item in deadList) { clearNode(item); } mListPool.destroyList(deadList); // 从根节点开始遍历 if (mRootNode != null && mRootNode.condition()) { mRootNode.execute(); } } }
public override void execute() { // 按子节点顺序查看子节点是否满足条件 int count = mChildList.Count; for (int i = 0; i < count; ++i) { DTreeNode node = mChildList[i]; // 找到一个满足条件的子节点就不再继续遍历 if (node.isActive() && node.condition()) { node.execute(); break; } } }