GameplayKit Namespace
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
Klasse | Zweck |
---|---|
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.