GameplayKit 命名空间

GameKit 命名空间为高级游戏玩法机制(例如寻路、规则引擎和 AI 对手)提供类。

GKAgent

一个 GKComponent 可以移动且有目标的 。

GKAgent2D

一个 GKAgent ,其移动限制为两个维度。

GKAgent3D

响应目标的 3D 代理。

GKAgentDelegate

委托对象,该对象提供与将 的状态 GKAgent 与外部约束、目标和表示形式同步相关的方法。

GKAgentDelegate_Extensions

接口的 IGKAgentDelegate 扩展方法,以支持协议中的所有方法 GKAgentDelegate

GKARC4RandomSource

基于 ARC4 算法的随机生成器。 通常是一个不错的选择。

GKBehavior

对象和权重的 GKGoal 集合,共同定义一个内聚的游戏行为。

GKBillowNoiseSource

一个 GKCoherentNoiseSource ,其输出类似于 Perlin 噪声,但具有更圆润的特征。

GKCheckerboardNoiseSource

一个 GKNoiseSource ,其输出由交替的黑白正方形组成。

GKCircleObstacle

GKObstacle由位置和半径定义的 。

GKCoherentNoiseSource

GKNoiseSource 输出平稳且持续变化的 。

GKComponent

Entity-Component 体系结构中组件(包括 GKAgent 对象)的抽象超类 (请参阅备注) 。

GKComponentSystem<TComponent>

保留 GKComponent 特定子类型的对象并定期更新它们。

GKCompositeBehavior

合并 GKBehavior 其他 GKBehavior 对象的 。

GKConstantNoiseSource

一个 GKNoiseSource ,其输出为单个值。

GKCylindersNoiseSource

一个 GKNoiseSource ,其输出由同心圆柱形外壳组成。 适用于木纹纹理。

GKDecisionNode

中的元素 GKDecisionTree

GKDecisionTree

问题、答案和操作的树。

GKEntity

由 Entity-Component 体系结构中的多个 GKComponent 对象组成的类型。

GKGameModel

以一种可使用 进行优化 GKMinMaxStrategist的方式描述游戏玩法。

GKGameModel_Extensions

接口的 IGKGameModel 扩展方法,以支持协议中的所有方法 GKGameModel

GKGameModelPlayer_Extensions

接口的 IGKGameModelPlayer 扩展方法,以支持协议中的所有方法 IGKGameModelPlayer

GKGaussianDistribution

一个 GKRandomDistribution ,它生成高斯 (正态) 分布。

GKGoal

影响一个或多个 GKAgent 对象的移动。

GKGraph

用于导航和路径查找的数学图。

GKGraphNode

GKGraph节点的基类。

GKGraphNode2D

一个 GKGraphNode 包含 2D 浮点位置的 。

GKGraphNode3D

存在于 GKGraphNode 三维空间中的 。

GKGridGraph

一个 GKGraph ,其中移动被限制为整数网格

GKGridGraphNode

包含 GKGraphNode 2D 整数位置的 。

GKHybridStrategist

一个 IGKStrategist ,它通过 MinMax 将蒙特卡洛树搜索和本地搜索相结合。

GKLinearCongruentialRandomSource

快速 GKRandomSource。 低阶位的随机性比 中的 GKARC4RandomSource随机性要少一些。

GKMersenneTwisterRandomSource

具有非常好的随机性的慢速 GKRandomSource

GKMeshGraph<NodeType>

GameKit 命名空间为高级游戏玩法机制(例如寻路、规则引擎和 AI 对手)提供类。

GKMinMaxStrategist

游戏 AI 评估潜在游戏状态,对其进行评分,并尝试将自己的分数最大化,同时最大程度地减少对手。

GKMonteCarloStrategist

策略师在确定性时间内达到可能接近最佳的解决方案。

GKNoise

使用 在 GKNoiseSource 程序上生成无限三维噪声字段。

GKNoiseMap

GKNoise 对象的无限三维噪声字段中切片有限的二维矩形。

GKNoiseSource

过程噪声生成器的抽象基类。

GKNSPredicateRule

一个 GKRuleNSPredicate ,它使用 确定是否应调用它的 操作。

GKObstacle

表示对象无法遍历的区域的 GKAgent 抽象类。

GKObstacleGraph

一个 , GKGraph 它生成用于表示形式的空间填充网络,允许平滑但效率低下的路径。

GKObstacleGraph<NodeType>

GameKit 命名空间为高级游戏玩法机制(例如寻路、规则引擎和 AI 对手)提供类。

GKOctree<ElementType>

高效组织三维元素的数据结构。

GKOctreeNode

中的节点 GKOctree<ElementType>。 由 GKOctree<ElementType> 自动管理,因为对象被添加和删除。

GKPath

保留后跟 GKAgent的 2D 多边形路径。

GKPerlinNoiseSource

一个 GKCoherentNoiseSource ,可生成改进的 Perlin 噪声。

GKPolygonObstacle

具有 GKObstacle 任意复杂形状的 。

GKQuadTree

一种在二维空间中有效组织对象的数据结构。

GKQuadTreeNode

四叉树中的节点。

GKRandomDistribution

定义概率分布。 此类定义一个均匀分布 (所有值都同样可能) ,同时子类 GKGaussianDistributionGKShuffledDistribution 提供不同的可能性。

GKRandomSource

适合游戏的伪随机数生成器的基类。 请勿将 用于加密或安全目的。

GKRidgedNoiseSource

一个 GKCoherentNoiseSource ,其输出类似于 Perlin 噪声,但具有清晰的边界。

GKRTree<ElementType>

用于高效搜索在二维空间中排列的对象的数据结构。

GKRule

由谓词和操作组成的单个元素,表示 中的 GKRuleSystem离散规则。

GKRuleSystem

维护对象的集合 GKRule ,并根据需要激活它们。

GKScene

将 GameplayKit 对象与 SpriteKit SKScene相关联。

GKSCNNodeComponent

GKComponent 上操作的 SCNNode

GKShuffledDistribution

GKRandomDistribution 个 ,它以一种使类似值的序列不太可能 (最小热/冷连) 的方式对集合进行洗牌。

GKSKNodeComponent

GameKit 命名空间为高级游戏玩法机制(例如寻路、规则引擎和 AI 对手)提供类。

GKSphereObstacle

GKObstacle 个 ,它是一个不可通行的球面卷。

GKSpheresNoiseSource

一个 GKNoiseSource ,其输出由同心 shell 组成。 适用于木纹纹理。

GKState

表示 中离散状态的 GKStateMachine抽象类。

GKStateMachine

保存 GKState 对象并管理对象之间的转换。

GKVoronoiNoiseSource

一个 , GKNoiseSource 其输出将空间划分为围绕种子点的单元格。 适用于晶体纹理。

NSArray_GameplayKit

GameKit 命名空间为高级游戏玩法机制(例如寻路、规则引擎和 AI 对手)提供类。

SCNNode_GameplayKit

GameKit 命名空间为高级游戏玩法机制(例如寻路、规则引擎和 AI 对手)提供类。

SKNode_GameplayKit

GameKit 命名空间为高级游戏玩法机制(例如寻路、规则引擎和 AI 对手)提供类。

结构

GKBox

轴对齐的矩形三维框。

GKQuad

GameKit 命名空间为高级游戏玩法机制(例如寻路、规则引擎和 AI 对手)提供类。

GKTriangle

GameKit 命名空间为高级游戏玩法机制(例如寻路、规则引擎和 AI 对手)提供类。

接口

IGKAgentDelegate

表示所需方法的接口 ((如果协议 GKAgentDelegate有任何) )。

IGKGameModel

当前游戏状态。 与 GKMinMaxStrategist结合使用特别有用。

IGKGameModelPlayer

游戏的唯一标识玩家。 开发人员必须实现 GetPlayerId(IGKGameModelPlayer)

IGKGameModelUpdate

有效的游戏移动。 将有效 IGKGameModel 转换为有效后续状态所需的最小数据。

IGKRandom

用于 GameplayKit 伪随机数生成器的接口。

IGKSceneRootNodeType

GameKit 命名空间为高级游戏玩法机制(例如寻路、规则引擎和 AI 对手)提供类。

IGKStrategist

游戏策略师 (AI) 界面。

枚举

GKMeshGraphTriangulationMode

包含有关如何在 中 GKMeshGraph<NodeType>生成节点的选项。

GKRTreeSplitStrategy

GameKit 命名空间为高级游戏玩法机制(例如寻路、规则引擎和 AI 对手)提供类。

注解

在 iOS 9 中引入的 GameKit 为高级游戏玩机制提供类,例如寻路、规则引擎 (模糊和经典) ,以及以 形式 GKMinMaxStrategist预生成的 AI 对手。

AI 对手

最小定理,约翰·冯·诺伊曼在1928年首次提出,认为在具有有限策略的两人零和游戏中,存在一些最佳发挥 (或发挥) ,同时最大化当前玩家的预期值,并最小化对方玩家的预期值。 换句话说,在这样的游戏中,有一个“最好的移动” (,当然,即使最好的移动可能导致输球或平局,这取决于游戏的状态) 。

GameplayKit 在其 GKMinMaxStrategist 类和相关类中实现 minimax 算法, (特别 GKGameModel) 。 GKMinMaxStrategist是 minimax 算法的优化版本,它有效地使用内存并分析终端节点处的搜索树,但开发人员应该知道该算法的成本可能很高:minimax 算法的时间效率是O(b^m)b单个向前看“ply”中的状态数,是m搜索 (的层数,请参阅 P:MonoTouch>GameplayKit.GKMinMaxStrategist.MaxLookAheadDepth) 。 算法的空间效率为 O(m)

最小定理适用于大量的游戏,从小游戏,如尼姆和蒂克塔-塔-图,到复杂的游戏,如国际象棋和围棋。 然而,象棋和围棋等游戏有很多可能的游戏状态和成本,以至于计算最佳动作的费用很快就会变成天文数字。 即使在此类情况下, GKMinMaxStrategist 也可用于评估数百或数千个移动,如果开发人员能够准确地对给定游戏状态的强项或弱项进行编程估计,则会产生强大的对手。

GKMinMaxStrategist开发人员不需要对 进行子类化。 相反,开发人员实现三个接口,并将这些接口传递给 GKMinMaxStrategist

目的
IGKGameModel 开发人员实现此接口是为了对游戏及其当前状态进行建模。 例如,在棋盘游戏中,这通常是棋盘和所有部分,以及对活动玩家的引用。 此外,如果该类要与 一起使用GKMinMaxStrategist,则此类必须实现描述 (M*) 的函数,并按照 (、、 IsLossGetScore) 的可取性IsWin对其进行评估。
IGKGameModelUpdate 此类描述游戏“移动”,并包含足够的信息,用于在当前状态和有效新状态之间转换 IGKGameModel 。 此类可能需要 GKMinMaxStrategist数千个实例,因此开发人员应注意使其轻量级。
IGKGameModelPlayer 依赖于 GKMinMaxStrategistM:GameplayKit.IGKGameModelPlayer.GetPlayerID*) 的值来区分玩家。

GKMinMaxStrategistGetBestMove键方法是 。 调用此方法时,将发生以下调用序列:

首先, IGKGameModelPlayer 检索对象。 然后,从当前游戏状态开始,虽然 ply 深度小于 MaxLookAheadDepth,但 GameKit.GKMinMaxStrategist.GetGameModelUpdates*将返回一组来自当前状态的合法可能移动。 然后,对于每个移动,可能需要 GKMinMaxStrategist 分配新内存;如果是,则调用 M:GameplayKit.GKMinMaxStrategist.Copy* 。 然后,在由 管理的许多GKGameModel对象之一上,通过调用 SetGameModel*来执行潜在的移动。GKMinMaxStrategist

然后, GKMinMaxStrategist 通过调用 、首先 IsWinIsLoss来评估每个潜在移动。 如果其中任一方法返回 true,则会 GKMinMaxStrategist 将该游戏状态标记为终端节点,并且不会在以后的层中尝试进一步调查它。 但是,如果两种方法都不返回 true,则调用方法 M:GameplayKit.GKGameModel_Extensions.Score*

开发人员应编写 M:GameplayKit.GKGameModel_Extensions.Score* 方法,以返回介于 (-16777216) 和 MaxScore (+16777216) 之间的MinScore值。 值越高表示更适合 GetActivePlayer的游戏状态。 在可以搜索IsWin整个游戏树的简单游戏中,M IsLosstrueMaxLookAheadDepthM:GameplayKit.GKGameModel_Extensions.Score* 方法可以只返回 0,因为 GKMinMaxStrategist 可以根据胜负移动计算最佳移动。 但是,这种情况很可能仅适用于相当简单的游戏,一般来说,创建性能良好的 GameplayKit.GKGameModel_Updates.Score* 函数需要游戏和编程专业知识。 在编程方面, M:GameplayKit.GKGameModel_Updates.Score* 方法在搜索游戏树期间多次调用,并且需要高效且准确。

开发人员应注意,GKMinMaxStrategist可能会分配 和 IGKGameModelIGKGameModelPlayer多个副本以及许多IGKGameModelUpdate对象。 开发人员应依赖于值,而不是引用、相等,并且当涉及到这些操作全局或静态状态的对象时,应小心谨慎。