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

recordsMap

概述

recordsMapMemorySystem 类的一个属性。它是一个存储记录的对象字典。每种类型的记录都被存储在一个数组中。每种记录都有一个唯一的记录ID。

结构

recordsMap 对象包含若干个子对象,每个子对象都代表一种类型的记录。子对象的属性名为类型名称,属性值为记录数组。例如:

{
  "book": [
    { "id": 1, "title": "JavaScript权威指南", "author": "Flanagan" },
    { "id": 2, "title": "CSS揭秘", "author": "Lea" }
  ],
  "movie": [
    { "id": 101, "title": "肖申克的救赎", "director": "Darabont" },
    { "id": 102, "title": "霸王别姬", "director": "Kaige" }
  ]
}

方法

recordsMap 对象提供了一些方法,用于操作记录数组:

  • addRecord(typeName, recordObj): 为指定类型的记录添加新记录。typeName 是记录的类型名称,recordObj 是一个 JavaScript 对象,代表要添加的新记录。该方法返回新记录的 ID。
  • removeRecord(typeName, recordId): 从指定类型的记录数组中移除一条记录。typeName 是记录的类型名称,recordId 是要移除的记录的 ID。
  • updateRecord(typeName, recordId, updateObj): 更新指定类型的记录的某个字段。typeName 是记录的类型名称,recordId 是要更新的记录的 ID,updateObj 是一个包含要更新字段及对应值的 JavaScript 对象。
  • getRecordById(typeName, recordId): 根据类型名称和 ID 获取一条记录。返回一条 JavaScript 对象,包含该条记录的全部字段信息。
  • getRecordsByType(typeName): 获取某一类型的所有记录。返回一个数组,包含该类型所有记录的 JavaScript 对象。

范例

下例演示如何使用 recordsMap 对象的方法操作记录数组。

const yuka = new Yuka.MemorySystem();

// 添加记录
const bookId1 = yuka.recordsMap.addRecord('book', { title: 'JavaScript高级程序设计', author: 'Nicholas' });
const bookId2 = yuka.recordsMap.addRecord('book', { title: '图解HTTP', author: '上野' });

// 更新记录
yuka.recordsMap.updateRecord('book', bookId2, { title: '图解HTTP2', author: '上野' });

// 获取记录
console.log(yuka.recordsMap.getRecordById('book', bookId1));
console.log(yuka.recordsMap.getRecordsByType('book'));

// 移除记录
yuka.recordsMap.removeRecord('book', bookId2);
console.log(yuka.recordsMap.getRecordsByType('book'));

输出结果:

{ "id": 3, "title": "JavaScript高级程序设计", "author": "Nicholas" }
[
  { "id": 3, "title": "JavaScript高级程序设计", "author": "Nicholas" },
  { "id": 4, "title": "图解HTTP2", "author": "上野" }
]
[
  { "id": 3, "title": "JavaScript高级程序设计", "author": "Nicholas" }
]

参考