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

Found

found() 函数是 Yuka.js 库中深度优先搜索(DFS)算法的主要部分之一。该函数用于在给定的根节点上执行 DFS,并返回指定目标对象是否可达的路径。

语法

found(rootNode, target[, options])

参数

  • rootNode:需要进行 DFS 的根节点。
  • target:目标节点。可以是 object 或 function 类型。
  • options:可选参数。用于设置搜索的选项。

选项对象包含以下属性:

  • maxDepth:搜索的深度限制,防止无限递归。默认值为 Infinity
  • excludeRoot:指示算法是否包含根节点的布尔值。默认为 false

返回

如果找到目标,函数将返回代表其的路径数组。否则返回 null

示例

以下是基本的例子:

import { found } from 'yuka';

const rootNode = { name: 'A', children: [{ name: 'B' }, { name: 'C', children: [{ name: 'D' }] }] };
const target = { name: 'D' };

const path = found(rootNode, target);

console.log(path); // [{name: 'A'}, {name: 'C'}, {name: 'D'}]

您也可以传递一个函数作为目标参数:

import { found } from 'yuka';

const rootNode = { name: 'A', children: [{ name: 'B' }, { name: 'C', children: [{ name: 'D' }] }] };
const target = node => node.name === 'D';

const path = found(rootNode, target);

console.log(path); // [{name: 'A'}, {name: 'C'}, {name: 'D'}]

这里,我们定义了一个函数,该函数接受一个节点并确定它是否为目标。在本例中,该函数检查节点的 name 属性是否等于 D

注意事项

  • target 参数可以是一个对象,也可以是一个函数,但不能同时是两个。
  • 如果根节点与目标节点相同,函数将返回 null,而不是一个包含根节点的路径数组。要包含根节点,必须将 excludeRoot 选项设置为 false