Ich arbeite derzeit in Xcode 8, mit Swift 3 und dem neuen SKTileMapNode von SpritKit, um einen 2D-Dungeon-Crawler-Spieltyp zu erstellen. Ich habe Probleme, GKObstacleGraph mit der Kachel zu arbeiten. Bitte helfen Sie! Ich habe versucht, alle Kacheln innerhalb der Hindernis-Ebene der Kachelkarte zu durchlaufen und ein Polygon für jede Kachel zu erstellen und im GKO-Hindernis-Graphen zu speichern. Jede Kachel in der Hindernisschicht ist eine Wandfliese. Die Karte sieht wie eine Art Dungeon-Crawler aus, also ist die Wand überall verteilt. Ich habe so etwas wie unten:GKObstacleGraph zur Arbeit mit SKTileMapNode
for row in 0..<tileMapNode.numberOfRows {
for column in 0..<tileMapNode.numberOfColumns {
let tile = tileMapNode.tileDefinition(atColumn: column, row: row)
let tileCenter = tileMapName.centerOfTile(atColumn: column, row: row)
//find 4 corners of each tile from its center
let bottomLeft = float2(CGPointMake(tileCenter.x - tile.size.width/2, tileCenter.y - tile.size.height/2))
let bottomRight = float2(CGPointMake((tileCenter.x - tile.size.width/2, tileCenter.y + tile.size.height/2))
let topRight = float2(CGPointMake((tileCenter.x + tile.size.width/2, tileCenter.y + tile.size.height/2))
let topLeft = float2(CGPointMake((tileCenter.x - tile.size.width/2, tileCenter.y + tile.size.height/2))
var vertices = [topLeft , bottomLeft , bottomRight , topRight ]
let obstacle = GKPolygonObstacle(points: &vertices, count: 4)
obstacleGraph.add(obstacle)
}
}
Allerdings, wenn ich die App ausführen es zeigt, dass es mehr als 80000 Knoten, viel zu viel Wegfindung pathes. Jede Hilfe wäre willkommen.
Dank Mark. Ich habe versucht, die Funktion objectsFromNodePhysicsBodies zu verwenden, aber es endete damit, dass ich dieselben Ergebnisse erhielt, was sinnvoll ist, weil jede Wandfliese einen eigenen Physikkörper hat und es Hunderte von ihnen auf der Karte gibt. Ich habe über GKGridGraph nachgedacht, bin mir aber nicht sicher, ob es gut passt, denn die Entitäten in meinem Spiel bewegen sich frei auf der Karte, es ist kein Gitter-basiertes Spiel. Kann ich GKGridGraph für die Pfadsuche auch dann verwenden, wenn das Spiel nicht gridbasiert ist? – Bob
Eine weitere Sache. Ich beabsichtige mit GKAgent feindliche Einheiten zu bewegen. etwas wie: GKGoal (toFollowPath: path, maxPredictionTime: 1.0, forward: true). Daher muss der Pfad GKGraphNodes enthalten, nicht GKGridGraphNodes. – Bob
Der 'GKGridGraphNode' erbt von' GKGraphNode', also kein Problem mit 'GKGoal'. –