Ich benutze SKTilemapNode. Wie kann ich das Pathfinding mit GameplayKit richtig nutzen?Pathfinding on Tilemap mit GameplayKit
Einige Info: Die Wände sind alle Fliesen und keine Fliesen sind ‚Wege‘
Ich benutze SKTilemapNode. Wie kann ich das Pathfinding mit GameplayKit richtig nutzen?Pathfinding on Tilemap mit GameplayKit
Einige Info: Die Wände sind alle Fliesen und keine Fliesen sind ‚Wege‘
Die Grundidee ist es, eine SKGridGraph
von verbundenen Knoten zu erstellen, dann die Knoten entfernen, die auf sein nicht ging. Die GameplayKit Guide zeigt ein Beispiel (Listing 6-1 Generieren eines Grid-Graphen). Also in Ihrem Fall mit SKTilemapNode
die Graphen Breite und Höhe wird durch die Anzahl der Breite und Höhe auf der Karte z. Wenn Ihre Karte 32 Fliesen breit und 18 Fliese hoch ist, initialisieren dann die Grafik mit einer Breite von 32 und eine Höhe von 18
Haben Sie ein gutes Tutorial für SKGridGraph? der Guide, den du gepostet hast, ist nicht so gut für mich – Lirf
[Dieses Tutorial] (http://in8bits.com/gameplaykit-in-swift-a-tower-defence-game-part-3/) ist ein gutes Beispiel für den Aufbau eines Tower Defense Spiel mit SpriteKit und GameplayKit. Es verwendet den 'SKGridGraph'. –
Dies ist, wie ich einen GKGridGraph mit dem Inhalt eines meiner Fliese Karten implementiert:
let graph = GKGridGraph(fromGridStartingAt: vector_int2(0,0), width: Int32(tileMap.numberOfColumns), height: Int32(tileMap.numberOfColumns), diagonalsAllowed: false)
var obstacles = [GKGridGraphNode]()
for column in 0..<tileMap.numberOfColumns
{
for row in 0..<tileMap.numberOfRows
{
let position = tileMap.centerOfTile(atColumn: column, row: row)
guard let definition = tileMap.tileDefinition(atColumn: column, row: row) else { continue }
guard let userData = definition.userData else { continue }
guard let isObstacle = userData["isObstacle"] else { continue }
if isObstacle
{
let wallNode = graph.node(atGridPosition: vector_int2(Int32(column),Int32(row)))!
obstacles.append(wallNode)
}
}
}
graph.remove(obstacles)
ich hatte die isObstacle Eigenschaft im Userdata Feld meines Hindernis Fliese zu setzen:
diese Weise können Sie das resultierende Raster Graphen erhalten, ohne die osbtacles.
Für jeden, der dieses Snippet verwendet, wird das Diagramm für die falschen Dimensionen eingerichtet. Es ist Setup für Wide = Spalten und Höhe = Spalten. Wenn Sie ein rechteckiges Raster haben, müssen Sie es in height = rows ändern –
dieses youtuber verwendet pathfinding innerhalb des SKEditor ziemlich ausgiebig .. Es ist kein Tutorial, aber er hat Wegfindung erfolgreich in seinem Spiel implementiert. https://www.youtube.com/user/Veeneck/videos. Außerdem müssen Sie wahrscheinlich die verwandten WWDC 2016-Videos, die Apple auf ihrer Website dazu hat, ansehen. – Fluidity