From 0d79db2c58dfe2240daf19f99ad84192dec8c420 Mon Sep 17 00:00:00 2001 From: gongxh Date: Tue, 15 Jul 2025 10:38:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A1=8C=E4=B8=BA=E6=A0=91?= =?UTF-8?q?=E5=85=B3=E9=94=AEbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复BehaviorTree.ts中lastOpenNodes的空指针风险 - 修复Ticker.ts中closeNode栈操作不对称问题 - 修复Agent.ts中subject参数传递错误 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/behaviortree/Agent.ts | 2 +- src/behaviortree/BehaviorTree.ts | 2 +- src/behaviortree/Ticker.ts | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) 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); + } } /**