Я играю со SpriteKit и TileMapNode, и у меня возникла досадная проблема.
Вот как это на самом деле выглядит в симуляторе / устройстве.
Белые пространства ужасны, и я понятия не имею, как от них избавиться. Мои плитки имеют размер около 70x70 в «Атласе спрайтов - часть» активов, я настроил свой узел тайловой карты с масштабом 0,5 и размером плитки 70x70.
Во время тестирования некоторых случаев я понял, что эта часть кода вызывает ошибку, но я понятия не имею, что может быть не так. Изменение размера SKPhysicsBody
на меньший не помогло.
guard let tilemap = childNode(withName: "LevelGround") as? SKTileMapNode else { return }
let tileSize = tilemap.tileSize
let halfWidth = CGFloat(tilemap.numberOfColumns) / 2.0 * tileSize.width
let halfHeight = CGFloat(tilemap.numberOfRows) / 2.0 * tileSize.height
for row in 0..<tilemap.numberOfRows {
for col in 0..<tilemap.numberOfColumns {
if tilemap.tileDefinition(atColumn: col, row: row) != nil {
let x = CGFloat(col) * tileSize.width - halfWidth
let y = CGFloat(row) * tileSize.height - halfHeight
let rect = CGRect(x: 0, y: 0, width: tileSize.width, height: tileSize.height)
let tileNode = SKShapeNode(rect: rect)
tileNode.position = CGPoint(x: x, y: y)
tileNode.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 70, height: 70), center: CGPoint(x: tileSize.width / 2.0, y: tileSize.height / 2.0))
tileNode.physicsBody?.isDynamic = false
tileNode.physicsBody?.collisionBitMask = 2
tileNode.physicsBody?.categoryBitMask = 1
tileNode.physicsBody?.contactTestBitMask = 2 | 1
tileNode.name = "Ground"
tilemap.addChild(tileNode)
}
}
}