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

execute

介绍

execute是Yuka JavaScript库中的一个方法,它可用于执行每个目标的计算操作,即使该目标已经达到操作后的某个状态。

用法

execute方法可以用于任何目标,只需通过以下方式访问它:

target.execute( timeDelta );

timeDelta参数表示两次调用之间的时间差,以毫秒为单位。

工作原理

目标的计算非常关键,因为它决定了该目标在该帧中移动的距离。execute方法在目标运动时执行这些计算操作。

当目标到达参考位置时,目标仍将继续进行计算,但它们实际上不移动。

执行过程如下:

  1. 检查目标是否处于“活动”状态。如果目标在达到目标状态后不再激活,则已停止执行该目标。

  2. 计算出目标当前位置与下一位置之间的向量,其中下一位置是根据 timeDelta 参数计算的目标移动距离得出的。

  3. 调用 integrate 方法来应用此向量并计算出新的目标位置。

  4. 当目标到达其最终状态时,停止移动。

  5. 如果移动过程中发生碰撞,则根据碰撞结果进行响应并调整目标状态。

示例

const target = new YUKA.GameEntity();
target.position.set( 5, 0, 5 );
target.setBehavior( new YUKA.ArriveBehavior( new YUKA.Vector3( 10, 0, 10 ) ) );

let timeElapsed = 0;

function animate( timeDelta ) {

    target.execute( timeDelta );
    timeElapsed += timeDelta;

    if ( timeElapsed > 5000 && target.active ) {

        target.setBehavior( null );

    }

}

在此示例中,我们创建了一个名为 target 的新实体,并为该实体应用了一个“ArriveBehavior”。此行为表示该目标希望移动到(10,0,10)处。然后,我们使用 execute 方法来计算该目标的移动,并在每次渲染时重复这个过程。

在这个示例中,我们自行检查了移动时间,并在5秒后停止了行为。当目标状态不再改变时,执行将被停止,因此目标停止移动。