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

dispatchDelayedMessages

在Yuka.js库的MessageDispatcher中,dispatchDelayedMessages函数用于在指定的时间间隔内调度所有已过期的消息。该方法执行多轮轮训,直到所有已过期的消息都被处理完毕。

语法

dispatchDelayedMessages( timeDelta );

参数

  • timeDelta:类型为数字,代表从上一次调用该函数到当前时刻的时间间隔(以毫秒为单位)。

示例

const dispatcher = new MessageDispatcher();

dispatcher.dispatchMessage( 1000, null, "Hello, World!" );
dispatcher.dispatchMessage( 2000, null, "Hi there!" );

dispatchDelayedMessages( 1500 ); // 1500毫秒后调用该函数

//所有已过期的消息都将被处理,并输出内容

执行流程

dispatchDelayedMessages函数的执行流程如下:

  1. 获取当前时间。将时间戳存储在currentTime变量中。
  2. 如果currentTime小于lastDispatchTime,则将lastDispatchTime更新为currentTime以避免无效轮询。
  3. 计算elapsedTime,表示从上一次调用该函数到当前时刻的时间间隔。
  4. 如果已过去的时间已经超过了调度时间dispatchTime,则遍历消息队列并处理所有已过期的消息。
  5. 如果还有未过期的消息,则更新dispatchTime为下一条最近消息的到期时间。
  6. 如果存在已过期的消息,则循环执行步骤4和步骤5。

注意事项

  • 调用该函数之前必须先向消息队列中添加消息。
  • 该函数的执行顺序受到消息到期时间的影响。如果最近的消息的到期时间非常遥远,那么该函数将不会有任何效果。
  • 如果有时间戳的问题,可能会导致wrong数据的处理,建议使用同步时间戳。