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

resolveReferences

在Yuka js库中,resolveReferences是一个用于解决状态中引用问题的函数。状态在Yuka中具有非常大的作用,可以用于管理实体、系统以及组件等。在状态中,可存储数据以及对其他状态的引用。但是,当状态之间相互引用时,如果没有妥善解决,可能会导致循环依赖等问题。resolveReferences函数的作用就在于解决这样的问题。

函数定义

resolveReferences函数的定义如下:

resolveReferences( state, resolver );

其中,state表示需要解决引用问题的目标状态,resolver是一个函数,用于查找目标状态中引用的其他状态。具体实现方式见下一节。

实现方式

resolveReferences函数的实现方式比较简单,主要是通过遍历状态的属性,判断是否为其他状态的引用,并将其替换成真实的状态。具体算法如下:

  1. 遍历目标状态的所有属性,如果属性值是个对象,则递归调用resolveReferences函数。
  2. 如果属性值是一个引用,即{"@": target}的形式,则在resolver函数中查找target对应的状态,并将其替换为真实状态。

根据上述算法,实现resolveReferences函数的代码如下:

function resolveReferences( state, resolver ) {
  for ( const key in state ) {
    const value = state[ key ];
    if ( typeof value === 'object' ) {
      resolveReferences( value, resolver );
    }
    else if ( typeof value === 'string' && value.startsWith( '@' ) ) {
      const ref = value.substring( 1 );
      state[ key ] = resolver( ref );
    }
  }
}

其中,resolver函数的定义为:

function resolver( ref ) {
  // 根据引用名称查找对应的状态
}

具体实现方式和实现过程略过。

总结

resolveReferences是Yuka js库中用于解决状态引用问题的重要函数。在状态中,若存在相互依赖的引用关系时,调用resolveReferences可快速解决问题。实现方式主要是通过遍历状态属性实现的,具有简单易懂、高效可靠等特点。