SpriteKit SKTileMapNode одно и то же физическое тело для нескольких тайлов - PullRequest
1 голос
/ 09 марта 2020

Следующий код правильно добавляет physicsBodies для каждой "настенной" плитки в моем SKTileMapNode. Однако я хотел бы сгруппировать их всех под одним узлом с одним physicsBody для всей группы. Как мне этого добиться?

private func setupTileMap() {
        let tileSize = self.tileMap.tileSize
        let halfWidth = CGFloat(self.tileMap.numberOfColumns) / 2.0 * tileSize.width
        let halfHeight = CGFloat(self.tileMap.numberOfRows) / 2.0 * tileSize.height
        for column in 0..<self.tileMap.numberOfColumns {
            for row in 0..<self.tileMap.numberOfRows {
                let tileDefinition = self.tileMap.tileDefinition(atColumn: column, row: row)
                let tileX = CGFloat(column) * tileSize.width - halfWidth
                let tileY = CGFloat(row) * tileSize.height - halfHeight
                let rect = CGRect(x: 0, y: 0, width: tileSize.width, height: tileSize.height)
                let tileNode = SKShapeNode(rect: rect)
                tileNode.strokeColor = .clear
                tileNode.position = CGPoint(x: tileX, y: tileY)
                let physicsBodyCenter = CGPoint(x: tileSize.width / 2.0, y: tileSize.height / 2.0)
                let physicsBody = SKPhysicsBody(rectangleOf: tileSize, center: physicsBodyCenter)
                physicsBody.isDynamic = false
                tileNode.physicsBody = physicsBody
                if tileDefinition?.name == Nodes.wall.rawValue {
                    physicsBody.categoryBitMask = CategoryMask.wall.rawValue
                }
                self.tileMap.addChild(tileNode)
            }
        }
    }
...