GameplayKit Ruang nama
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI.
Kelas
GKAgent |
Yang GKComponent dapat bergerak dan memiliki tujuan. |
GKAgent2D |
A GKAgent yang gerakannya dibatasi hingga dua dimensi. |
GKAgent3D |
Agen 3D yang merespons tujuan. |
GKAgentDelegate |
Delegasikan objek yang menyediakan metode yang berkaitan dengan sinkronisasi status dengan batasan GKAgent , tujuan, dan representasi eksternal. |
GKAgentDelegate_Extensions |
Metode ekstensi ke IGKAgentDelegate antarmuka untuk mendukung semua metode dari GKAgentDelegate protokol. |
GKARC4RandomSource |
Generator acak berdasarkan algoritma ARC4. Seringkali pilihan yang baik. |
GKBehavior |
Kumpulan GKGoal objek dan bobot, bersama-sama menentukan perilaku permainan yang kohesif. |
GKBillowNoiseSource |
Output GKCoherentNoiseSource yang outputnya mirip dengan kebisingan Perlin tetapi dengan fitur yang lebih bulat. |
GKCheckerboardNoiseSource |
A GKNoiseSource yang outputnya terdiri dari kotak hitam dan putih bergantian. |
GKCircleObstacle |
Yang GKObstacle ditentukan oleh lokasi dan radius. |
GKCoherentNoiseSource |
Output GKNoiseSource yang bervariasi dengan lancar dan terus menerus. |
GKComponent |
Mengabstraksi superkelas untuk komponen, termasuk GKAgent objek, dalam arsitektur Entity-Component (lihat keterangan). |
GKComponentSystem<TComponent> |
Menyimpan objek dari subjenis GKComponent tertentu dan memperbaruinya secara berkala. |
GKCompositeBehavior |
GKBehavior yang menggabungkan objek lainGKBehavior. |
GKConstantNoiseSource |
Yang GKNoiseSource outputnya adalah nilai tunggal. |
GKCylindersNoiseSource |
Yang GKNoiseSource output-nya terdiri dari shell silindris konsentris. Sesuai untuk tekstur butir kayu. |
GKDecisionNode |
Elemen dalam GKDecisionTree. |
GKDecisionTree |
Pohon pertanyaan, jawaban, dan tindakan. |
GKEntity |
Jenis yang terdiri dari sejumlah GKComponent objek dalam arsitektur Entity-Component. |
GKGameModel |
Menjelaskan gameplay dengan cara yang dapat dioptimalkan dengan GKMinMaxStrategist. |
GKGameModel_Extensions |
Metode ekstensi ke IGKGameModel antarmuka untuk mendukung semua metode dari GKGameModel protokol. |
GKGameModelPlayer_Extensions |
Metode ekstensi ke IGKGameModelPlayer antarmuka untuk mendukung semua metode dari IGKGameModelPlayer protokol. |
GKGaussianDistribution |
GKRandomDistribution yang menghasilkan distribusi Gaussian (normal). |
GKGoal |
Memengaruhi pergerakan satu atau beberapa GKAgent objek. |
GKGraph |
Grafik matematika yang digunakan untuk menavigasi dan pathfinding. |
GKGraphNode |
Kelas dasar untuk simpul dalam GKGraph. |
GKGraphNode2D |
GKGraphNode yang berisi posisi floating-point 2D. |
GKGraphNode3D |
GKGraphNode yang ada dalam ruang tiga dimensi. |
GKGridGraph |
GKGraph di mana gerakan dibatasi ke kisi bilangan bulat |
GKGridGraphNode |
GKGraphNode yang berisi posisi bilangan bulat 2D. |
GKHybridStrategist |
Yang IGKStrategist menggabungkan Monte Carlo Tree Search dan pencarian lokal melalui MinMax. |
GKLinearCongruentialRandomSource |
GKRandomSourceCepat. Bit berurutan rendah agak kurang acak daripada di GKARC4RandomSource. |
GKMersenneTwisterRandomSource |
GKRandomSource Lambat dengan keacakan yang sangat baik. |
GKMeshGraph<NodeType> |
Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI. |
GKMinMaxStrategist |
Game AI yang mengevaluasi status permainan potensial, mencetaknya, dan mencoba memaksimalkan skornya sendiri sambil meminimalkan lawannya. |
GKMonteCarloStrategist |
Ahli strategi yang mencapai solusi yang mungkin mendekati optimal dalam jumlah waktu yang deterministik. |
GKNoise |
Menggunakan untuk secara prokusedural menghasilkan bidang kebisingan GKNoiseSource tiga dimensi yang tak terbatas. |
GKNoiseMap |
Mengiris persegi panjang dua dimensi terbatas dari GKNoise bidang kebisingan tiga dimensi objek yang tak terbatas. |
GKNoiseSource |
Kelas dasar abstrak untuk generator kebisingan prosedural. |
GKNSPredicateRule |
GKRule Yang menggunakan NSPredicate untuk menentukan apakah tindakan tersebut harus dipanggil. |
GKObstacle |
Kelas abstrak yang mewakili area yang GKAgent tidak dapat dilalui objek. |
GKObstacleGraph |
GKGraph yang menghasilkan jaringan pengisian ruang untuk representasi, memungkinkan jalur yang lancar, tetapi tidak efisien. |
GKObstacleGraph<NodeType> |
Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI. |
GKOctree<ElementType> |
Struktur data yang secara efisien mengatur elemen tiga dimensi. |
GKOctreeNode |
Simpul dalam GKOctree<ElementType>. Dikelola secara otomatis oleh GKOctree<ElementType> sebagai objek ditambahkan dan dihapus. |
GKPath |
Memegang jalur poligonal 2D yang dapat diikuti oleh GKAgent. |
GKPerlinNoiseSource |
yang GKCoherentNoiseSource menghasilkan kebisingan Perlin yang ditingkatkan. |
GKPolygonObstacle |
A GKObstacle dengan bentuk yang sangat kompleks. |
GKQuadTree |
Struktur data yang mengatur objek secara efisien dalam ruang dua dimensi. |
GKQuadTreeNode |
Simpul dalam quadtree. |
GKRandomDistribution |
Menentukan distribusi probabilitas. Kelas ini mendefinisikan distribusi seragam (semua nilai kemungkinannya sama), sementara subkelas GKGaussianDistribution dan GKShuffledDistribution memberikan kemungkinan yang berbeda. |
GKRandomSource |
Kelas dasar untuk generator angka pseudo-random yang sesuai dengan game. Jangan gunakan untuk tujuan kriptografi atau keamanan. |
GKRidgedNoiseSource |
Yang GKCoherentNoiseSource outputnya mirip dengan kebisingan Perlin tetapi dengan batas tajam. |
GKRTree<ElementType> |
Struktur data untuk mencari objek secara efisien yang diatur dalam ruang dua dimensi. |
GKRule |
Elemen tunggal, yang terdiri dari predikat dan tindakan, yang mewakili aturan diskrit dalam GKRuleSystem. |
GKRuleSystem |
Mempertahankan kumpulan GKRule objek, mengaktifkannya sebagaimana mewajarkannya. |
GKScene |
Mengaitkan objek GameplayKit dengan SpriteKit SKScene. |
GKSCNNodeComponent |
GKComponent yang beroperasi pada SCNNode. |
GKShuffledDistribution |
GKRandomDistribution Yang mengacak koleksi dengan cara yang membuat urutan nilai serupa tidak mungkin (goresan panas/dingin minimal). |
GKSKNodeComponent |
Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI. |
GKSphereObstacle |
GKObstacle yang merupakan volume spherical yang tidak dapat dilewati. |
GKSpheresNoiseSource |
Output GKNoiseSource yang terdiri dari shell konsentris. Sesuai untuk tekstur butir kayu. |
GKState |
Kelas abstrak yang mewakili status diskrit dalam GKStateMachine. |
GKStateMachine |
GKState Menyimpan objek dan mengelola transisi di antaranya. |
GKVoronoiNoiseSource |
Yang GKNoiseSource outputnya membagi ruang menjadi sel-sel di sekitar titik benih. Sesuai untuk tekstur kristal. |
NSArray_GameplayKit |
Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI. |
SCNNode_GameplayKit |
Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI. |
SKNode_GameplayKit |
Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI. |
Struct
GKBox |
Kotak tiga dimensi persegi panjang rata sumbu. |
GKQuad |
Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI. |
GKTriangle |
Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI. |
Antarmuka
IGKAgentDelegate |
Antarmuka yang mewakili metode yang diperlukan (jika ada) dari protokol GKAgentDelegate. |
IGKGameModel |
Status permainan saat ini. Sangat berguna bersama dengan GKMinMaxStrategist. |
IGKGameModelPlayer |
Pemain permainan yang diidentifikasi secara unik. Pengembang harus menerapkan GetPlayerId(IGKGameModelPlayer). |
IGKGameModelUpdate |
Perpindahan permainan yang valid. Data minimal yang diperlukan untuk transisi valid IGKGameModel ke status berikutnya yang valid. |
IGKRandom |
Antarmuka untuk generator angka pseudo-random GameplayKit. |
IGKSceneRootNodeType |
Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI. |
IGKStrategist |
Antarmuka untuk strategi permainan (AI). |
Enum
GKMeshGraphTriangulationMode |
Menyimpan opsi tentang bagaimana simpul harus dihasilkan dalam GKMeshGraph<NodeType>. |
GKRTreeSplitStrategy |
Namespace GameplayKit menyediakan kelas untuk mekanisme bermain game tingkat tinggi seperti pathfinding, mesin aturan, dan lawan AI. |
Keterangan
Diperkenalkan di iOS 9, GameplayKit menyediakan kelas untuk mekanisme permainan tingkat tinggi seperti pathfinding, mesin aturan (fuzzy dan klasik), dan lawan AI bawaan dalam bentuk GKMinMaxStrategist.
Lawan AI
Theorem minimax, pertama kali dinyatakan oleh John von Neumann pada tahun 1928, memegang bahwa dalam dua orang, nol-jumlah, permainan dengan strategi terbatas, ada beberapa permainan optimal (atau bermain) yang secara bersamaan memaksimalkan nilai yang diharapkan untuk pemain saat ini dan meminimalkan nilai yang diharapkan untuk pemain lawan. Dengan kata lain, dalam permainan seperti itu, ada "gerakan terbaik" (meskipun, tentu saja, bahkan langkah terbaik mungkin menyebabkan kekalahan atau dasi, tergantung pada keadaan permainan).
GameplayKit mengimplementasikan algoritma minimax di kelasnya GKMinMaxStrategist dan kelas terkait (terutama GKGameModel). GKMinMaxStrategist adalah versi yang dioptimalkan dari algoritma minimax yang menggunakan memori secara efisien dan mengurai pohon pencarian pada simpul terminal, tetapi pengembang harus menyadari bahwa algoritma dapat mahal: efisiensi waktu algoritma minimax adalah O(b^m)
di mana b
adalah jumlah status dalam "ply" look-ahead tunggal dan m
merupakan jumlah balasan yang dicari (lihat P:MonoTouch>GameplayKit.GKMinMaxStrategist.MaxLookAheadDepth). Efisiensi ruang algoritma adalah O(m)
.
Teori minimax berlaku untuk sejumlah besar game, mulai dari yang sepele seperti Nim dan Tic-Tac-Toe, hingga game kompleks seperti Chess and Go. Namun, game seperti Chess and Go memiliki begitu banyak kemungkinan status permainan dan plies bahwa pengeluaran menghitung langkah optimal dengan cepat menjadi astronomis. Bahkan dalam kasus seperti itu GKMinMaxStrategist , dapat digunakan untuk mengevaluasi beberapa ratus atau ribu gerakan dan, jika pengembang dapat secara akurat memprogram perkiraan kekuatan atau kelemahan keadaan game tertentu, menghasilkan lawan yang kuat.
GKMinMaxStrategist tidak perlu disubklasifikasikan oleh pengembang. Sebaliknya, pengembang mengimplementasikan tiga antarmuka dan meneruskan ini ke GKMinMaxStrategist:
Kelas | Tujuan |
---|---|
IGKGameModel | Pengembang mengimplementasikan antarmuka ini untuk memodelkan game dan statusnya saat ini. Dalam permainan papan, misalnya, ini biasanya akan menjadi papan dan semua bagian dan referensi ke pemain aktif. Selain itu, jika akan digunakan dengan GKMinMaxStrategist, kelas ini harus mengimplementasikan fungsi yang menjelaskan potensi gerakan (M:GameplayKit.GKGameModule.GetGameModelUpdates*) dan mengevaluasinya dalam hal diinginkan (IsWin, , IsLossGetScore). |
IGKGameModelUpdate | Kelas ini menjelaskan permainan "bergerak" dan berisi informasi yang cukup untuk transisi IGKGameModel antara statusnya saat ini dan yang baru yang valid. Banyak ribu instans kelas ini mungkin diperlukan oleh GKMinMaxStrategist, sehingga pengembang harus berhati-hati untuk membuatnya ringan. |
IGKGameModelPlayer | Mengandalkan GKMinMaxStrategist nilai M:GameplayKit.IGKGameModelPlayer.GetPlayerID*) untuk membedakan antar pemain. |
Metode utama adalah GKMinMaxStrategistGetBestMove. Ketika metode ini dipanggil, urutan panggilan berikut terjadi:
Pertama, IGKGameModelPlayer objek diambil. Kemudian, dimulai dengan status game saat ini, dan sementara kedalaman ply kurang dari MaxLookAheadDepth, kumpulan kemungkinan hukum bergerak dari status saat ini dikembalikan oleh M:GameplayKit.GKMinMaxStrategist.GetGameModelUpdates*. Kemudian, untuk setiap gerakan ini, mungkin perlu untuk GKMinMaxStrategist mengalokasikan memori baru; jika demikian, M:GameplayKit.GKMinMaxStrategist.Copy* dipanggil. Kemudian, pada salah satu dari banyak GKGameModel objek yang dikelola oleh GKMinMaxStrategist, potensi pemindahan dijalankan dengan panggilan ke SetGameModel dan M:GameplayKit.IGKGameModel.ApplyGameState*.
Kemudian GKMinMaxStrategist mengevaluasi masing-masing potensi gerakan dengan memanggil, pertama, IsWin dan IsLoss. Jika salah satu metode ini mengembalikan true
, GKMinMaxStrategist tanda bahwa status game sebagai node terminal dan tidak akan mencoba menyelidikinya lebih lanjut di balasan nanti. Namun, jika tidak ada metode yang true
mengembalikan , metode M:GameplayKit.GKGameModel_Extensions.Score* dipanggil.
Pengembang harus menulis metode M:GameplayKit.GKGameModel_Extensions.Score* untuk mengembalikan nilai antara MinScore (-16777216) dan MaxScore (+16777216). Nilai yang lebih tinggi mewakili status game yang lebih baik untuk GetActivePlayer. Dalam permainan sederhana di mana seluruh pohon game dapat dicari karena IsWin atau IsLoss selalu kembali true
dalam MaxLookAheadDepth, metode M:GameplayKit.GKGameModel_Extensions.Score* hanya dapat mengembalikan 0, karena GKMinMaxStrategist dapat menghitung langkah terbaik berdasarkan langkah menang dan kalah. Namun, ini hanya mungkin terjadi dalam permainan yang cukup mudah dan, secara umum, membuat fungsi M:GameplayKit.GKGameModel_Updates.Score* yang berkinerja baik akan membutuhkan keahlian bermain game dan pemrograman. Dalam hal pemrograman, metode M:GameplayKit.GKGameModel_Updates.Score* dipanggil berkali-kali selama pencarian pohon game dan perlu efisien, serta akurat.
Pengembang harus mencatat bahwa GKMinMaxStrategist mungkin mengalokasikan banyak salinan IGKGameModelPlayer dan IGKGameModel serta banyak IGKGameModelUpdate objek. Pengembang harus mengandalkan nilai, bukan referensi, kesetaraan, dan harus berhati-hati dalam hal objek ini memanipulasi status global atau statis.