共用方式為


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,產生 Gaussian (常態) 分佈。

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

GKRule 用來 NSPredicate 判斷是否應該呼叫它的動作。

GKObstacle

抽象類別,表示物件無法周遊的區域 GKAgent

GKObstacleGraph

GKGraph,產生空間填滿網路的 標記法,允許順暢但效率不佳的路徑。

GKObstacleGraph<NodeType>

GameKit 命名空間提供高階遊戲機制的類別,例如路徑定義、規則引擎和 AI 元素。

GKOctree<ElementType>

有效率地組織三維元素的資料結構。

GKOctreeNode

中的 GKOctree<ElementType> 節點。 新增和移除物件時,會自動由 GKOctree<ElementType> 管理。

GKPath

保留 2D 多邊形路徑,後面 GKAgent 接著 。

GKPerlinNoiseSource

GKCoherentNoiseSource,產生改善的 Perlin 雜訊。

GKPolygonObstacle

GKObstacle具有任意複雜圖形的 。

GKQuadTree

有效率地在二維空間中組織物件的資料結構。

GKQuadTreeNode

四邊形圖中的節點。

GKRandomDistribution

定義機率分佈。 這個類別會定義統一分佈 (所有值同樣可能) ,而子類別 GKGaussianDistributionGKShuffledDistribution 提供不同的可能性。

GKRandomSource

適用于遊戲適當虛擬亂數產生器的基類。 請勿用於密碼編譯或安全性用途。

GKRidgedNoiseSource

GKCoherentNoiseSource 其輸出類似于 Perlin 雜訊,但具有明確的界限。

GKRTree<ElementType>

資料結構,用於有效率地搜尋以二維空間排列的物件。

GKRule

單一專案,包含述詞和動作,代表 中的 GKRuleSystem 離散規則。

GKRuleSystem

維護 物件的集合 GKRule ,並適當地加以啟用。

GKScene

將GamesKit 物件與 SpriteKit SKScene 產生關聯。

GKSCNNodeComponent

GKComponent在 上運作的 SCNNode

GKShuffledDistribution

GKRandomDistribution 會以讓類似值的序列 (最少的經常性/冷波浪線) 的方式隨機顯示集合。

GKSKNodeComponent

GameKit 命名空間提供高階遊戲機制的類別,例如路徑定義、規則引擎和 AI 元素。

GKSphereObstacle

GKObstacle,是不可複製的球面磁片區。

GKSpheresNoiseSource

GKNoiseSource 其輸出是由同心殼層所組成。 適用于木紋紋理。

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

GameKit 虛擬亂數產生器的介面。

IGKSceneRootNodeType

GameKit 命名空間提供高階遊戲機制的類別,例如路徑定義、規則引擎和 AI 元素。

IGKStrategist

遊戲策略 (AI) 的介面。

列舉

GKMeshGraphTriangulationMode

保留如何在 中 GKMeshGraph<NodeType> 產生節點的選項。

GKRTreeSplitStrategy

GameKit 命名空間提供高階遊戲機制的類別,例如路徑定義、規則引擎和 AI 元素。

備註

在 iOS 9 中引進,GameKit 提供高階遊戲機制的類別,例如路徑定義、規則引擎 (模糊和傳統) ,以及以 形式 GKMinMaxStrategist 預先建置的 AI 工具。

AI 系統

由 John von Neumann 在 1928 年第一次陳述的 minimax 定理,在具有有限策略的雙人、零總和遊戲中,有一些最佳的遊戲 (或播放) 同時最大化目前球員的預期值,並將相對球員的預期值降至最低。 換句話說,在這類遊戲中,「最佳移動」 (不過,即使最佳移動可能會導致遺失或系結,視遊戲的狀態而定) 。

GameKit 會在其 GKMinMaxStrategist 類別中實作 minimax 演算法,以及 (特別 GKGameModel) 的相關類別。 GKMinMaxStrategist是 minimax 演算法的優化版本,會有效率地使用記憶體,並在終端機節點剖析搜尋樹狀結構,但開發人員應該注意演算法的成本可能很高:minimax 演算法的時間效率是 O(b^m)b 單一視角前 「ply」 中的狀態數目,而且 m 是搜尋的 plies 數目 (請參閱 P:MonoTouchGameKit.GKMinMaxStrategist.MaxLookAheadDepth >) 。 演算法的空間效率為 O(m)

minimax 定理適用于非常大量的遊戲,例如 Nim 和 Tic-Tac-Toe,到複雜的遊戲,例如 Chess 和 Go。 不過,象棋和 Go 等遊戲有許多可能的遊戲狀態和費力,計算最佳移動的成本會快速變成運動。 即使在這類情況下, GKMinMaxStrategist 也可以用來評估數百或數千次移動,而且,如果開發人員可以正確程式設計指定遊戲狀態的強度或弱點估計值,則會產生強式的優缺點。

GKMinMaxStrategist不需要由開發人員子類別化。 相反地,開發人員會實作三個介面,並將其傳遞至 GKMinMaxStrategist

類別用途
IGKGameModel 開發人員會實作此介面,以建立遊戲模型,而且它是目前的狀態。 例如,在棋盤遊戲中,這通常是棋盤和所有片段,以及作用中玩家的參考。 此外,如果要與 搭配 GKMinMaxStrategist 使用,這個類別必須實作描述可能移動的函式, ( *) ,並以可還原性 (IsWinIsLossGetScore) 進行評估。
IGKGameModelUpdate 這個類別描述遊戲「移動」,並包含足夠的資訊,以在目前狀態與有效的新狀態之間轉換 IGKGameModel 。 此類別可能需要 GKMinMaxStrategist 數千個實例,因此開發人員應該小心讓它變得輕量。
IGKGameModelPlayer 依賴 GKMinMaxStrategist M:GameKit.IGKGameModelPlayer.GetPlayerID*的值,) 區分玩家。

GKMinMaxStrategistGetBestMove 索引鍵方法是 。 呼叫此方法時,會發生下列呼叫順序:

首先,會 IGKGameModelPlayer 擷取物件。 然後,從目前的遊戲狀態開始,而 ply 深度小於 MaxLookAheadDepth ,則 *會傳回一組合法的可能移動。 然後,針對每個移動,可能需要 GKMinMaxStrategist 配置新的記憶體;如果是,則會呼叫 * 。 然後,在 所管理的許多物件其中一個上,可能會執行移動, SetGameModel 並呼叫 和 *GKGameModelGKMinMaxStrategist

接著會 GKMinMaxStrategist 呼叫 、第一個 IsWinIsLoss 來評估每個可能的移動。 如果上述任一方法傳 true 回 ,則會 GKMinMaxStrategist 將該遊戲狀態標示為終端節點,且不會嘗試在稍後進行進一步調查。 不過,如果兩種方法都傳回 true ,則會呼叫 M:GameplayKit.GKGameModel_Extensions.Score*

開發人員應該撰寫 GameplayKit.GKGameModel_Extensions.Score*方法,以傳回 (-16777216) 和 MaxScore (+16777216) 之間的 MinScore 值。 較高的值代表較適合 GetActivePlayer 的遊戲狀態。 在可以搜尋 IsWin 整個遊戲樹狀結構的簡單遊戲中,或 IsLoss 一律傳 MaxLookAheadDepthtrue*方法可以直接傳回 0,因為 GKMinMaxStrategist 可以根據勝出和失去移動來計算最佳移動。 不過,這很可能在相當容易的遊戲中,而且一般而言,製作高效能 * 函式將需要遊戲遊戲和程式設計專業知識。 就程式設計而言, * 方法會在搜尋遊戲樹時多次呼叫,而且必須有效率且精確。

開發人員應該注意, GKMinMaxStrategist 可能會配置 和 IGKGameModel 的許多複本 IGKGameModelPlayer 以及許多 IGKGameModelUpdate 物件。 開發人員應該依賴價值,而不是參考、相等,而且應該在操作全域或靜態狀態的物件時小心。