Как установить непрозрачность тайлсета в тайловой карте spritekit? - PullRequest
0 голосов
/ 27 мая 2020

У меня есть код для определения PhysicsBody для каждого тайла в тайловой карте, как показано ниже:

func setUpSceneWithMap(map: SKTileMapNode) {

        let tileMap = map
        tileMap.setScale(0.4)

        let startingLocation: CGPoint = tileMap.position
        let tileSize = tileMap.tileSize

        let halfWidth = CGFloat(tileMap.numberOfColumns) / 2.0 * tileSize.width * 0.4
        let halfHeight = CGFloat(tileMap.numberOfRows) / 2.0 * tileSize.height * 0.4

        for col in 0..<tileMap.numberOfColumns {

            for row in 0..<tileMap.numberOfRows {

                if  tileMap.tileDefinition(atColumn: col, row: row) != nil {

                    // defining different types of tile
                    let tileDefinition = tileMap.tileDefinition(atColumn: col, row: row)
                    ...
                    let isTrapTile = tileDefinition?.userData?["isTraps"] as? Bool

                    let x = CGFloat(col) * (tileSize.width) * 0.4 - halfWidth
                    let y = CGFloat(row) * (tileSize.height) * 0.4 - halfHeight

                    let rect = CGRect(x: 0, y: 0, width: tileSize.width * 0.4 , height: tileSize.height * 0.4)
                    let tileNode = SKShapeNode(rect: rect)

                    tileNode.position = CGPoint(x: x + startingLocation.x, y: y + startingLocation.y)
                    tileNode.zPosition = 1
                    tileNode.physicsBody = SKPhysicsBody(edgeLoopFrom: rect)

                    // Create the 4 checkpoint-tiles at the center of the maze
                    ...
                    // Create the wall tile
                    ...
                    // Create the trap tile
                    if (isTrapTile ?? false) {
                        tileNode.physicsBody?.categoryBitMask = gamePhysics.Trap
                        tileNode.physicsBody?.collisionBitMask = 0
                        tileNode.physicsBody?.contactTestBitMask = gamePhysics.Player
                        tileNode.physicsBody?.isDynamic = false
                    }

                    self.addChild(tileNode)

                }
            }
        }
    }

В моей тайловой карте есть 3 разных набора тайлов: Стена, Контрольная точка и Ловушка. С помощью приведенного выше кода я назначил всем им Spritenode с физическим телом. Теперь я хочу, чтобы моя плитка ловушки была невидимой, чтобы игрок не мог ее видеть. Каков наиболее эффективный способ ее достижения?

1 Ответ

0 голосов
/ 29 мая 2020

Вы должны использовать myNode.alpha = CGFloat;. Это влияет только на узлы, которые наследуются от SKNode.

Согласно Документации Apple на myNode.alpha значении:

Значение по умолчанию - 1.0.

Класс SKNode не выполняет рисование, но многие его подклассы делают. Когда отрисовывается узел или любой из его потомков, альфа-компонент каждого пикселя умножается на свойство альфа узла и затем ограничивается диапазоном 0,0–1,0. Это измененное значение альфа-канала используется для смешивания пикселя с буфером кадра.

По сути, значение альфа-канала влияет на то, как спрайт отображается на чертеже кадра.

В вашем случае вы должны установите myTrapTileNode.alpha = 0.0;, потому что вы хотите, чтобы он был полностью прозрачным.

...