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

compare

简介

compare是Yuka JS库中的一个函数,它是用于比较数据的方法。在使用优先队列时,我们需要比较节点的优先级,在该场景下就可以用到compare函数。

参数

compare函数接受两个参数,即两个要比较的数据节点。

  • a: 第一个要比较的数据节点。
  • b: 第二个要比较的数据节点。

返回值

compare函数会返回一个数字,该数字表示两个数据之间的比较结果。

  • 如果a的值大于b的值,则返回大于0的数字。
  • 如果a的值等于b的值,则返回0。
  • 如果a的值小于b的值,则返回小于0的数字。

使用示例

import { Queue } from 'yuka';

class TestNode {
  constructor( priority ) {
    this.priority = priority;
  }
}

function compare( a, b ) {
  return b.priority - a.priority;
}

const queue = new Queue( compare );

queue.enqueue( new TestNode( 1 ) );
queue.enqueue( new TestNode( 3 ) );
queue.enqueue( new TestNode( 2 ) );

console.log( queue.getLength() );  // 输出3

const node = queue.dequeue();

console.log( node.priority );  // 输出3

在上面的示例中,我们首先定义了一个用于测试的节点类TestNode,每个节点有一个优先级属性priority

我们通过定义compare函数,将其作为优先队列的比较方法。在上面的compare函数中,我们返回b.priority - a.priority,这个数字表示b的优先级是否大于a的优先级。如果返回值为正数,说明b的优先级更高,否则说明a的优先级更高。

然后,我们创建了一个优先队列queue,将三个TestNode类型的实例对象按照优先级加入到队列中。在执行queue.dequeue()方法时,优先队列会将优先级最高的节点从队列中取出来,此时node.priority的值为3。