Freigeben über


GameplayKit Namespace

Der GameplayKit-Namespace bietet Klassen für allgemeine Spielmechaniken wie Pfadsuche, Regel-Engines und KI-Gegner.

Klassen

GKAgent

Ein GKComponent , der sich bewegen kann und Ziele hat.

GKAgent2D

Ein GKAgent , dessen Bewegung auf zwei Dimensionen beschränkt ist.

GKAgent3D

Ein 3D-Agent, der auf Ziele reagiert.

GKAgentDelegate

Delegatobjekt, das Methoden im Zusammenhang mit der Synchronisierung des Zustands von mit GKAgent externen Einschränkungen, Zielen und Darstellungen bereitstellt.

GKAgentDelegate_Extensions

Erweiterungsmethoden für die IGKAgentDelegate Schnittstelle, um alle Methoden aus dem GKAgentDelegate Protokoll zu unterstützen.

GKARC4RandomSource

Zufallsgenerator basierend auf dem ARC4-Algorithmus. Oft eine gute Wahl.

GKBehavior

Eine Sammlung von GKGoal Objekten und Gewichtungen, die zusammen ein zusammenhängendes Spielverhalten definieren.

GKBillowNoiseSource

Ein GKCoherentNoiseSource , dessen Ausgabe dem Perlin-Rauschen ähnelt, aber mit abgerundeten Features.

GKCheckerboardNoiseSource

Ein GKNoiseSource , dessen Ausgabe aus abwechselnden schwarzen und weißen Quadraten besteht.

GKCircleObstacle

Eine GKObstacle , die durch einen Standort und einen Radius definiert wird.

GKCoherentNoiseSource

Ein GKNoiseSource , dessen Ausgabe reibungslos und kontinuierlich variiert.

GKComponent

Abstrakte Superklasse für Komponenten, einschließlich GKAgent -Objekten, in einer Entity-Component-Architektur (siehe Hinweise).

GKComponentSystem<TComponent>

Enthält GKComponent Objekte eines bestimmten Untertyps und aktualisiert sie in regelmäßigen Abständen.

GKCompositeBehavior

Ein GKBehavior , der andere GKBehavior Objekte kombiniert.

GKConstantNoiseSource

Ein GKNoiseSource , dessen Ausgabe ein einzelner Wert ist.

GKCylindersNoiseSource

Ein GKNoiseSource , dessen Ausgabe aus konzentrischen zylindrischen Schalen besteht. Geeignet für Holzmaserungstexturen.

GKDecisionNode

Ein Element in einem GKDecisionTree.

GKDecisionTree

Eine Struktur mit Fragen, Antworten und Aktionen.

GKEntity

Ein Typ, der aus einer Reihe von GKComponent Objekten in einer Entity-Component-Architektur besteht.

GKGameModel

Beschreibt das Gameplay auf eine Weise, die mit einem GKMinMaxStrategistoptimiert werden kann.

GKGameModel_Extensions

Erweiterungsmethoden für die IGKGameModel Schnittstelle, um alle Methoden aus dem GKGameModel Protokoll zu unterstützen.

GKGameModelPlayer_Extensions

Erweiterungsmethoden für die IGKGameModelPlayer Schnittstelle, um alle Methoden aus dem IGKGameModelPlayer Protokoll zu unterstützen.

GKGaussianDistribution

Eine GKRandomDistribution , die eine gaußische (Normal-)Verteilung erzeugt.

GKGoal

Beeinflusst die Bewegung eines oder GKAgent mehrerer Objekte.

GKGraph

Ein mathematischer Graph, der für navigierbarkeit und Pfadsuche verwendet wird.

GKGraphNode

Die Basisklasse für Knoten in einem GKGraph.

GKGraphNode2D

Eine GKGraphNode , die eine 2D-Gleitkommaposition enthält.

GKGraphNode3D

Ein GKGraphNode , das im dreidimensionalen Raum vorhanden ist.

GKGridGraph

Ein GKGraph , in dem die Verschiebung auf ein ganzzahliges Raster beschränkt ist

GKGridGraphNode

Eine GKGraphNode , die eine 2D-Ganzzahlposition enthält.

GKHybridStrategist

Ein IGKStrategist , der die Monte Carlo Tree Search und die lokale Suche über MinMax kombiniert.

GKLinearCongruentialRandomSource

Eine schnelle GKRandomSource. Bits niedriger Reihenfolge sind etwas weniger zufällig als in GKARC4RandomSource.

GKMersenneTwisterRandomSource

Eine langsame GKRandomSource mit sehr guter Zufälligkeit.

GKMeshGraph<NodeType>

Der GameplayKit-Namespace bietet Klassen für allgemeine Spielmechaniken wie Pfadsuche, Regel-Engines und KI-Gegner.

GKMinMaxStrategist

Spiel-KI, die potenzielle Spielzustände auswertet, bewertet und versucht, ihre eigene Punktzahl zu maximieren und gleichzeitig die Gegner zu minimieren.

GKMonteCarloStrategist

Ein Stratege, der eine Lösung erreicht, die in deterministischem Zeitaufwand wahrscheinlich nahezu optimal ist.

GKNoise

Verwendet ein GKNoiseSource , um prozedural ein unendliches dreidimensionales Rauschfeld zu generieren.

GKNoiseMap

Segmentiert ein endliches, zweidimensionales Rechteck aus dem unendlichen, dreidimensionalen Rauschfeld eines GKNoise Objekts.

GKNoiseSource

Abstrakte Basisklasse für prozedurale Rauschgeneratoren.

GKNSPredicateRule

Ein GKRule , der verwendet, NSPredicate um zu bestimmen, ob die Aktion aufgerufen werden soll.

GKObstacle

Abstrakte Klasse, die Bereiche darstellt, die GKAgent von Objekten nicht durchlaufen werden können.

GKObstacleGraph

Ein GKGraph , das ein raumfüllendes Netzwerk für die Darstellung generiert, das reibungslose, aber ineffiziente Pfade ermöglicht.

GKObstacleGraph<NodeType>

Der GameplayKit-Namespace bietet Klassen für allgemeine Spielmechaniken wie Pfadsuche, Regel-Engines und KI-Gegner.

GKOctree<ElementType>

Eine Datenstruktur, die dreidimensionale Elemente effizient organisiert.

GKOctreeNode

Ein Knoten in einem GKOctree<ElementType>. Wird automatisch von verwaltet, GKOctree<ElementType> da Objekte hinzugefügt und entfernt werden.

GKPath

Enthält einen polygonalen 2D-Pfad, dem ein GKAgentgefolgt werden kann.

GKPerlinNoiseSource

Eine GKCoherentNoiseSource , die ein verbessertes Perlin-Rauschen erzeugt.

GKPolygonObstacle

Ein GKObstacle mit einer willkürlich komplexen Form.

GKQuadTree

Eine Datenstruktur, die Objekte effizient im zweidimensionalen Raum organisiert.

GKQuadTreeNode

Ein Knoten in einem Quadtree.

GKRandomDistribution

Definiert eine Wahrscheinlichkeitsverteilung. Diese Klasse definiert eine einheitliche Verteilung (alle Werte gleich wahrscheinlich), während Unterklassen GKGaussianDistribution und GKShuffledDistribution unterschiedliche Wahrscheinlichkeiten bereitstellen.

GKRandomSource

Basisklasse für spielgerechte Pseudo-Zufallszahlengeneratoren. Verwenden Sie nicht für Kryptografie- oder Sicherheitszwecke.

GKRidgedNoiseSource

Eine GKCoherentNoiseSource , deren Ausgabe dem Perlin-Rauschen ähnelt, aber mit scharfen Grenzen.

GKRTree<ElementType>

Eine Datenstruktur zum effizienten Durchsuchen von Objekten, die im zweidimensionalen Raum angeordnet sind.

GKRule

Ein einzelnes Element, bestehend aus einem Prädikat und einer Aktion, das eine diskrete Regel in einem GKRuleSystemdarstellt.

GKRuleSystem

Verwaltet eine Auflistung von GKRule -Objekten und aktiviert diese nach Bedarf.

GKScene

Ordnet GameplayKit-Objekte einem SpriteKit SKScenezu.

GKSCNNodeComponent

Ein GKComponent , der mit einem SCNNodearbeitet.

GKShuffledDistribution

Eine GKRandomDistribution , die eine Auflistung auf eine Weise mischt, die Sequenzen ähnlicher Werte unwahrscheinlich macht (minimale heiße/kalte Streifen).

GKSKNodeComponent

Der GameplayKit-Namespace bietet Klassen für allgemeine Spielmechaniken wie Pfadsuche, Regel-Engines und KI-Gegner.

GKSphereObstacle

Ein GKObstacle , das ein unpassierbares kugelförmiges Volumen ist.

GKSpheresNoiseSource

Ein GKNoiseSource , dessen Ausgabe aus konzentrischen Shells besteht. Geeignet für Holzmaserungstexturen.

GKState

Eine abstrakte Klasse, die einen diskreten Zustand in einem GKStateMachinedarstellt.

GKStateMachine

Enthält GKState Objekte und verwaltet die Übergänge zwischen ihnen.

GKVoronoiNoiseSource

Ein GKNoiseSource , dessen Ausgabe den Raum in Zellen um Ausgangspunkte unterteilt. Geeignet für kristalline Texturen.

NSArray_GameplayKit

Der GameplayKit-Namespace bietet Klassen für allgemeine Spielmechaniken wie Pfadsuche, Regel-Engines und KI-Gegner.

SCNNode_GameplayKit

Der GameplayKit-Namespace bietet Klassen für allgemeine Spielmechaniken wie Pfadsuche, Regel-Engines und KI-Gegner.

SKNode_GameplayKit

Der GameplayKit-Namespace bietet Klassen für allgemeine Spielmechaniken wie Pfadsuche, Regel-Engines und KI-Gegner.

Strukturen

GKBox

Ein achsenbündiges rechteckiges dreidimensionales Feld.

GKQuad

Der GameplayKit-Namespace bietet Klassen für allgemeine Spielmechaniken wie Pfadsuche, Regel-Engines und KI-Gegner.

GKTriangle

Der GameplayKit-Namespace bietet Klassen für allgemeine Spielmechaniken wie Pfadsuche, Regel-Engines und KI-Gegner.

Schnittstellen

IGKAgentDelegate

Schnittstelle, die die erforderlichen Methoden (falls vorhanden) des Protokolls GKAgentDelegatedarstellt.

IGKGameModel

Der aktuelle Spielzustand. Besonders nützlich in Verbindung mit GKMinMaxStrategist.

IGKGameModelPlayer

Ein eindeutig identifizierter Spieler eines Spiels. Entwickler müssen implementieren GetPlayerId(IGKGameModelPlayer).

IGKGameModelUpdate

Eine gültige Spielverschiebung. Die minimalen Daten, die erforderlich sind, um eine gültige IGKGameModel in einen gültigen nachfolgenden Zustand zu übergehen.

IGKRandom

Schnittstelle für GameplayKit-Pseudo-Zufallszahlengeneratoren.

IGKSceneRootNodeType

Der GameplayKit-Namespace bietet Klassen für allgemeine Spielmechaniken wie Pfadsuche, Regel-Engines und KI-Gegner.

IGKStrategist

Schnittstelle für einen Spielstrategen (KI).

Enumerationen

GKMeshGraphTriangulationMode

Enthält Optionen, wie Knoten in einem GKMeshGraph<NodeType>generiert werden sollen.

GKRTreeSplitStrategy

Der GameplayKit-Namespace bietet Klassen für allgemeine Spielmechaniken wie Pfadsuche, Regel-Engines und KI-Gegner.

Hinweise

Das in iOS 9 eingeführte GameplayKit bietet Klassen für allgemeine Spielmechaniken wie Pfadsuche, Regel-Engines (sowohl Fuzzy als auch klassisch) und einen vordefinierten KI-Gegner in Form von GKMinMaxStrategist.

KI-Gegner

Das 1928 von John von Neumann erstmals erwähnte Minimax-Theorem besagt, dass in einem Zwei-Personen-, Nullsummenspiel mit endlichen Strategien ein optimales Spiel (oder Spiel) vorhanden ist, das gleichzeitig den erwarteten Wert für den aktuellen Spieler maximiert und den erwarteten Wert für den gegnerischen Spieler minimiert. Mit anderen Worten, in solchen Spielen gibt es eine "beste Bewegung" (obwohl natürlich selbst der beste Zug je nach Zustand des Spiels zu einem Verlust oder einem Unentschieden führen kann).

GameplayKit implementiert den minimax-Algorithmus in seiner GKMinMaxStrategist Klasse und den zugehörigen Klassen (insbesondere GKGameModel). ist GKMinMaxStrategist eine optimierte Version des minimax-Algorithmus, die Arbeitsspeicher effizient verwendet und die Suchstruktur auf Terminalknoten analysiert, aber Entwickler sollten sich bewusst sein, dass der Algorithmus teuer sein kann: Die Zeiteffizienz des minimax-Algorithmus ist O(b^m) die b Anzahl der Zustände in einem einzelnen Look-Ahead-"ply" und m die Anzahl der gesuchten Anzahlen (siehe P:MonoTouch>GameplayKit.GKMinMaxStrategist.MaxLookAheadDepth). Die Raumeffizienz des Algorithmus ist O(m).

Das Minimax-Theorem gilt für eine sehr große Anzahl von Spielen, von trivialen Spielen wie Nim und Tic-Tac-Toe bis hin zu komplexen Spielen wie Chess und Go. Spiele wie Chess und Go haben jedoch so viele mögliche Spielzustände und Plünderungen, dass der Aufwand für die Berechnung der optimalen Bewegung schnell astronomisch wird. Auch in solchen Fällen kann der GKMinMaxStrategist verwendet werden, um mehrere hundert oder tausend Verschiebungen auszuwerten und, wenn der Entwickler eine Schätzung der Stärke oder Schwäche eines bestimmten Spielzustands genau programmieren kann, einen starken Gegner produzieren.

Die GKMinMaxStrategist muss vom Entwickler nicht unterklassiert werden. Stattdessen implementiert der Entwickler drei Schnittstellen und übergibt diese an :GKMinMaxStrategist

KlasseZweck
IGKGameModel Entwickler implementieren diese Schnittstelle, um das Spiel und seinen aktuellen Zustand zu modellieren. In einem Brettspiel ist dies für instance in der Regel das Brett und alle Teile und ein Verweis auf den aktiven Spieler. Wenn sie mit GKMinMaxStrategistverwendet werden soll, muss diese Klasse außerdem die Funktionen implementieren, die potenzielle Verschiebungen (M:GameplayKit.GKGameModule.GetGameModelUpdates*) beschreiben und in Bezug auf die Erwünschtkeit auswerten (IsWin, IsLoss, GetScore).
IGKGameModelUpdate Diese Klasse beschreibt ein "Verschieben" eines Spiels und enthält genügend Informationen, um zwischen dem IGKGameModel aktuellen Zustand und einem gültigen neuen Zustand zu wechseln. Viele tausend Instanzen dieser Klasse können für GKMinMaxStrategisterforderlich sein, daher sollte der Entwickler darauf achten, sie einfach zu gestalten.
IGKGameModelPlayer Die GKMinMaxStrategist basiert auf dem Wert von M:GameplayKit.IGKGameModelPlayer.GetPlayerID*), um zwischen Spielern zu unterscheiden.

Die Schlüsselmethode von GKMinMaxStrategist ist GetBestMove. Wenn diese Methode aufgerufen wird, erfolgt die folgende Sequenz von Aufrufen:

Zuerst werden die IGKGameModelPlayer -Objekte abgerufen. Beginnend mit dem aktuellen Spielstatus und während die Ply-Tiefe kleiner als MaxLookAheadDepthist, wird der Satz der zulässigen Verschiebungen aus dem aktuellen Zustand von M:GameplayKit.GKMinMaxStrategist.GetGameModelUpdates* zurückgegeben. Dann kann es für jede dieser Verschiebungen erforderlich sein, dass der GKMinMaxStrategist neuen Speicher zuordnet; wenn ja, wird M:GameplayKit.GKMinMaxStrategist.Copy* aufgerufen. Anschließend wird auf einem der vielen GKGameModel Objekte, die GKMinMaxStrategistvon verwaltet werden, eine potenzielle Verschiebung mit Aufrufen von SetGameModel und M:GameplayKit.IGKGameModel.ApplyGameState* ausgeführt.

Die GKMinMaxStrategist wertet dann jede der potenziellen Verschiebungen aus, IsWin indem zuerst und IsLossaufgerufen werden. Wenn eine dieser Methoden zurückgibt true, markiert den GKMinMaxStrategist Spielzustand als Terminalknoten und versucht nicht, ihn in späteren Fällen weiter zu untersuchen. Wenn jedoch keine der Methoden zurückgibt true, wird die M:GameplayKit.GKGameModel_Extensions.Score* aufgerufen.

Der Entwickler sollte eine M:GameplayKit.GKGameModel_Extensions.Score*- Methode schreiben, um einen Wert zwischen MinScore (-16777216) und MaxScore (+16777216) zurückzugeben. Höhere Werte stellen Spielzustände dar, die für besser GetActivePlayersind. In einfachen Spielen, bei denen die gesamte Spielstruktur durchsucht werden kann, weil oder immer innerhalb MaxLookAheadDepthzurückgegeben true werden kann, kann die M:GameplayKit.GKGameModel_Extensions.Score*-Methode einfach 0 zurückgeben, da die GKMinMaxStrategist die beste Bewegung basierend auf den gewonnenen und verlierenden Zügen berechnen kann.IsLossIsWin Dies ist jedoch wahrscheinlich nur bei ganz einfachen Spielen der Fall, und im Allgemeinen erfordert das Erstellen einer leistungsstarken M:GameplayKit.GKGameModel_Updates.Score* -Funktion sowohl Spiel- als auch Programmierkenntnisse. In Bezug auf die Programmierung wird die M:GameplayKit.GKGameModel_Updates.Score* -Methode während der Suche des Spielbaums mehrmals aufgerufen und muss sowohl effizient als auch genau sein.

Entwickler sollten beachten, dass viele GKMinMaxStrategist Kopien von IGKGameModelPlayer und IGKGameModel sowie viele IGKGameModelUpdate Objekte zugeordnet werden können. Entwickler sollten sich auf Wert und nicht auf Verweis und Gleichheit verlassen und bei diesen Objekten, die den globalen oder statischen Zustand bearbeiten, Sorgfalt walten lassen.