В настоящее время я делаю игру со Spritekit и пытаюсь выяснить, почему мои нормализованные текстуры не применяются должным образом при рендеринге на устройстве, хотя в симуляторе они выглядят нормально.
Воткод, который добавляет нормальные текстуры к определениям плиток, среди прочего:
self.wallTileMap = self.scene?.childNode(withName: "Walls") as? SKTileMapNode
let textureAtlas = SKTextureAtlas(named: "Wall Normal Maps")
if let tileMap = self.wallTileMap {
let startingLocation:CGPoint = tileMap.position
let tileSize = tileMap.tileSize
let halfWidth = CGFloat(tileMap.numberOfColumns) / 2.0 * tileSize.width
let halfHeight = CGFloat(tileMap.numberOfRows) / 2.0 * tileSize.height
let rows = tileMap.numberOfRows
let columns = tileMap.numberOfColumns
for column in 0..<columns {
for row in 0..<rows {
let x = CGFloat(column) * tileSize.width - halfWidth + (tileSize.width / 2)
let y = CGFloat(row) * tileSize.height - halfHeight + (tileSize.height / 2)
if let tileDefinition = tileMap.tileDefinition(atColumn: column, row: row) {
if let name = tileDefinition.name {
let normalTexture = textureAtlas.textureNamed("\(name)_n")
tileDefinition.normalTextures = [normalTexture]
}
if (tileDefinition.userData?["shouldKill"] as? Bool ?? false) {
let newNode = SKShapeNode(rectOf: tileDefinition.size)
newNode.position = CGPoint(x: x, y: y)
newNode.isHidden = true
newNode.physicsBody = SKPhysicsBody(texture: tileDefinition.textures[0], size: tileDefinition.size)
newNode.physicsBody?.isDynamic = false
newNode.physicsBody?.affectedByGravity = false
newNode.physicsBody?.categoryBitMask = CollisionTypes.wall.rawValue
newNode.physicsBody?.collisionBitMask = CollisionTypes.dynamicComponents.rawValue
newNode.physicsBody?.contactTestBitMask = CollisionTypes.dynamicComponents.rawValue
self.addChild(newNode)
newNode.position = CGPoint(x: newNode.position.x + startingLocation.x, y: newNode.position.y + startingLocation.y)
}
}
}
}
}
Результат для симулятора - который ожидается:
результат на устройстве - что неверно:
Я перепробовал несколько симуляторов, все они работали.Я также пробовал несколько физических устройств, и они были разбиты на всех них.
Единственное, что я смог найти во время отладки, - это то, что обычные изображения на устройстве иногда выглядели не на один пиксель размером.Таким образом, нормальный размер составляет 128 x 128, и иногда размер на устройстве будет 128 x 127 или 127 x 127. Не знаю, что может вызвать это, и не является ли это реальной проблемой.
У кого-нибудь есть идеи?почему карты нормалей будут правильно отображаться в симуляторе, а не на устройстве?