SpriteKitNode Цвет фона - PullRequest
       24

SpriteKitNode Цвет фона

0 голосов
/ 12 января 2020

Я строю карточную игру и у меня есть изображение для текстуры моего узла SpriteKit. Это изображение в формате PDF для обложки карты, и я хочу установить цвет фона карты (пустое пространство вокруг обложки). Изображение, которое я имею, является просто художественным оформлением карты и не имеет какой-либо детализации фона. Как я могу установить фон для этого? Установка атрибута «color» в инициализации SKSpriteNode только меняет цвет моего объекта изображения. Как я могу получить доступ к цвету и текстуре «пустого пространства» позади изображения, оставаясь при этом в ширине и размере, установленных в super.init?

Я не хочу менять все мои PDF-файлы и добавлять белый слой на оборотную сторону, потому что я могу захотеть сделать некоторые пользовательские изменения цвета для фона карты во время игры. Я попытался добавить SKShapeNode внутри функции init (пример ниже), но это технически накладывается поверх моего Card SKSpriteNode, и тогда пользователь не может нажать на фактическую «Card». Кажется, это должно быть довольно просто, но у меня было много проблем.

import SpriteKit

class Card: SKSpriteNode {

    init(image: String) {
        super.init(texture: SKTexture(imageNamed: image), color: .clear,
                   size: CGSize(width: K.cardSize[0], height: K.cardSize[1]))

        //Background
        let background = SKShapeNode(rectOf: CGSize(width: K.cardSize[0], height: K.cardSize[1]), cornerRadius: 15)
        background.fillColor = UIColor.white
        background.zPosition = -10
        addChild(background)
    }

}

1 Ответ

1 голос
/ 13 января 2020

Создайте 2 таких узла SKSprite.

class Card: SKSpriteNode {

    init(imageName: String) {
       let card = SKSpriteNode(imageNamed:imageName)
       //Create the rounded corner image without resorting to SKShapeNode
       UIGraphicsBeginImageContext(card.size)
           let context =  UIGraphicsGetCurrentContext()
           context.clear(rect)
           context.setFillColor(UIColor.white.cgColor)
           let rect = CGRect(origin: .zero, size:size)
           let path = UIBezierPath(roundedRect:rect, cornerRadius:0.15)
           path.fill()
           let image = context.makeImage();
       UIGraphicsEndImageContext();

       super.init(texture:SKTexture(cgImage:image))        

       card.isUserInteractionEnabled = false
       addChild(card)
    }

}

Теперь это будет воспринимать изображение вашей карты как текстуру, а не как интерактивный узел.

...