diff --git a/src/behaviortree/Agent.ts b/src/behaviortree/Agent.ts index 96d0c1e..a8be3ce 100644 --- a/src/behaviortree/Agent.ts +++ b/src/behaviortree/Agent.ts @@ -25,7 +25,7 @@ export class Agent { * 执行 */ public tick(): void { - this.tree.tick(this, this.blackboard, this.ticker); + this.tree.tick(this.ticker.subject, this.blackboard, this.ticker); if (this.blackboard.interrupt) { this.blackboard.interrupt = false; diff --git a/src/behaviortree/BehaviorTree.ts b/src/behaviortree/BehaviorTree.ts index ad33f81..a1cf5d5 100644 --- a/src/behaviortree/BehaviorTree.ts +++ b/src/behaviortree/BehaviorTree.ts @@ -32,7 +32,7 @@ export class BehaviorTree { ticker.openNodes.length = 0; this._root._execute(ticker); // 上次打开的节点 - let lastOpenNodes = blackboard.get("openNodes", this._id) as BaseNode[]; + let lastOpenNodes = (blackboard.get("openNodes", this._id) || []) as BaseNode[]; // 当前打开的节点 let currOpenNodes = ticker.openNodes; let start = 0; diff --git a/src/behaviortree/Ticker.ts b/src/behaviortree/Ticker.ts index 27e3728..501156a 100644 --- a/src/behaviortree/Ticker.ts +++ b/src/behaviortree/Ticker.ts @@ -44,7 +44,11 @@ export class Ticker { * @param node 节点 */ public closeNode(node: BaseNode): void { - this.openNodes.pop(); + // 查找并移除指定节点,而不是简单地pop + const index = this.openNodes.lastIndexOf(node); + if (index !== -1) { + this.openNodes.splice(index, 1); + } } /**