Текстура SKTileDefinition не отображается должным образом вне симулятора - PullRequest
0 голосов
/ 29 января 2019

В настоящее время я делаю игру со 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)
                    }
                }
            }
        }
    }

Результат для симулятора - который ожидается: Game running in simulator

результат на устройстве - что неверно: enter image description here

Я перепробовал несколько симуляторов, все они работали.Я также пробовал несколько физических устройств, и они были разбиты на всех них.

Единственное, что я смог найти во время отладки, - это то, что обычные изображения на устройстве иногда выглядели не на один пиксель размером.Таким образом, нормальный размер составляет 128 x 128, и иногда размер на устройстве будет 128 x 127 или 127 x 127. Не знаю, что может вызвать это, и не является ли это реальной проблемой.

У кого-нибудь есть идеи?почему карты нормалей будут правильно отображаться в симуляторе, а не на устройстве?

...