handleMessage
是 Yuka js 库中 CompositeGoal
类的一个方法,用于处理消息。
CompositeGoal
是一个目标类,用于组合子目标,并管理它们的生命周期。
handleMessage(telegram)
参数说明
telegram
:一个包含有关消息的信息的对象。当 CompositeGoal
成功被激活时,它可能把子目标的执行权委托给另外的目标。当一个子目标(称为“当前子目标”)处于活动状态时,消息将传递给当前子目标,这个消息将被传递到目标的 handleMessage
方法中。
实际上,具有多个常规子目标的大型 Goal
组合可能是非常复杂的。 CompositeGoal
的处理消息机制能够很好地处理这种复杂情况。
当消息被传递到当前子目标时,它将按顺序传递,直到一个目标处理该消息并返回 true
(表示消息得到处理)。如果当前子目标不能处理消息,则此消息将向下传递到下一子目标。
当所有子目标都无法处理此消息时,当前子目标会被切换为下一个子目标,handleMessage
将再次被调用以查看该目标能否处理该消息。
如果所有子目标都无法处理消息,则此消息被认为是未处理的。
// 定义一个子类 Goal
class MyGoal extends Goal {
handleMessage(telegram) {
if (telegram.message === 'hello') {
console.log('Hello World');
return true;
}
return false;
}
}
// 定义子目标
const subGoals = [
new MyGoal(),
new MyGoal(),
new MyGoal()
];
// 定义一个组合目标
const compositeGoal = new CompositeGoal(subGoals);
// 模拟传递消息给组合目标
compositeGoal.handleMessage({message: 'hello'}); // 输出 Hello World