AABB
AlignmentBehavior
ArriveBehavior
AStar
BFS
BoundingSphere
BVH
BVHNode
Cell
CellSpacePartitioning
CohesionBehavior
CompositeGoal
ConvexHull
Corridor
CostTable
DFS
Dijkstra
Edge
EntityManager
EvadeBehavior
EventDispatcher
Behavior
FollowPathBehavior
FuzzyAND
FuzzyCompositeTerm
FuzzyFAIRLY
FuzzyModule
FuzzyOR
FuzzyRule
FuzzySet
FuzzyTerm
FuzzyVariable
FuzzyVERY
GameEntity
Goal
GoalEvaluator
Graph
GraphUtils
HalfEdge
HeuristicPolicyDijkstra
HeuristicPolicyEuclid
HeuristicPolicyEuclidSquared
HeuristicPolicyManhattan
InterposeBehavior
LeftSCurveFuzzySet
LeftShoulderFuzzySet
LineSegment
Logger
MathUtils
Matrix3
Matrix4
MemoryRecord
MemorySystem
MeshGeometry
MessageDispatcher
MovingEntity
NavEdge
NavMesh
NavMeshLoader
NavNode
Node
NormalDistFuzzySet
OBB
ObstacleAvoidanceBehavior
OffsetPursuitBehavior
OnPathBehavior
Path
Plane
Polygon
Polyhedron
PriorityQueue
PursuitBehavior
Quaternion
Ray
RectangleTriggerRegion
Regular
RightSCurveFuzzySet
RightShoulderFuzzySet
SAT
SeekBehavior
SeparationBehavior
SingletonFuzzySet
Smoother
SphericalTriggerRegion
State
StateMachine
SteeringBehavior
SteeringManager
Task
TaskQueue
Telegram
Think
Time
TriangularFuzzySet
Trigger
TriggerRegion
Vector3
Vehicle
Version
WanderBehavior

handleMessage

简介

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

参考