2017-03-11 2 views
1

Ich versuche mit SKTileMapNode und SKTileMaps einen Sidescroller zu erstellen, aber ich habe Probleme mit den physikalischen Körpern einzelner Kacheln. Ich schaffe sie in einer Schleife, wie in diesem Link beschrieben:SKTileMapNode Kollisionen funktionieren nicht

https://forums.developer.apple.com/thread/50043

aber meine Spieler Knoten durch den Boden gelangt. Was mache ich falsch?

 guard let landBackground = childNode(withName: "ground") 
     as? SKTileMapNode else { 
      fatalError("Background node not loaded") 
    } 
    self.landBackground = landBackground 
    self.tileSize = landBackground.tileSize 

    for x in 0...(landBackground.numberOfColumns-1){ 
     for y in 0...(landBackground.numberOfRows-1){ 

      let tile = landBackground.tileDefinition(atColumn: x, row: y) 
      if(tile != nil){ 
       let rect = CGRect(x: 0, y: 0, width: tileSize.width, height: tileSize.height) 
       let tileNode = SKShapeNode(rect: rect) 

       tileNode.position = self.landBackground.centerOfTile(atColumn: x, row: y) 

       tileNode.position.x -= (tileSize.width * 0.5) 
       tileNode.position.y -= (tileSize.height * 0.5) 

       tileNode.physicsBody = SKPhysicsBody(rectangleOf: tileSize, center: tileNode.position) 
       tileNode.physicsBody?.isDynamic = false 
       tileNode.physicsBody?.collisionBitMask = playerCategory|groundCategory 

       //tileNode.physicsBody?.contactTestBitMask = playerCategory 
       tileNode.physicsBody?.categoryBitMask = groundCategory 
       landBackground.addChild(tileNode) 
      } 
     } 
    } 

Antwort

1

SKPhysicsBody(rectangleOf: tileSize, center: tileNode.position)

Dies ist wahrscheinlich nicht korrekt. Die Dokumentation für den Aufruf lautet:

Die Mitte des Quadrats im Koordinatensystem des besitzenden Knotens.

Das bedeutet, dass Sie wahrscheinlich .zero verwenden sollten. Es wird immer vorausgesetzt, dass sich der Physikkörper an der gleichen Stelle befindet wie der Knoten, dem er angehört, es sei denn, er ist speziell versetzt. Sie sollten niemals Szenenkoordinaten dafür verwenden.

Vergewissern Sie sich auch, dass Sie showsPhysics auf true auf Ihrem SKView gesetzt haben, damit Sie sehen können, wo sie wirklich sind.

+0

Danke, das hat mein Problem behoben! –