SpriteKitNode 背景颜色

Posted

技术标签:

【中文标题】SpriteKitNode 背景颜色【英文标题】:SpriteKitNode Background Color 【发布时间】:2020-01-12 19:34:45 【问题描述】:

我正在构建一个纸牌游戏,并为我的 SpriteKit 节点的纹理制作了一张图像。该图像是卡片艺术品的 pdf 图像,我想设置卡片的背景颜色(艺术品周围的空白区域)。我拥有的图像只是卡片的艺术品,没有任何背景细节。如何为此设置背景?在 SKSpriteNode 初始化中设置“颜色”属性只会改变我的图像对象的颜色。如何在保持 super.init 中设置的宽度和大小的同时访问图像后面“空白空间”的颜色和纹理?

我不想更改我所有的 pdf 文件并在背面添加一个白色图层,因为我可能希望在玩游戏时对卡片的背景进行一些自定义颜色更改。我尝试在 init 函数中添加一个 SKShapeNode(下面的示例),但从技术上讲,它覆盖在我的 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)
    


【问题讨论】:

你已经设置了 zPosition,所以背景应该在卡片的后面,看起来是正确的。如果您在谈论用户交互,哪些节点正在处理交互(设置了isUserInteractionEnabled)?也许您正在处理树中较高位置而不是卡片上的触摸,并且正在使用atPoint,它返回最深的孩子(在本例中为背景)?如果是后者,修复包括使用nodes(at:)、获取触摸背景的父级或让Card 处理用户交互。 不需要 SKShapeNode,使用颜色和大小初始化的 SKSpriteNode 【参考方案1】:

像这样创建 2 个 SKSpriteNodes

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)
    


现在这会将您的卡片图像视为纹理而不是交互式节点。

【讨论】:

谢谢!这很好用!唯一对我不起作用的是圆角。我的“bezierPathWith...”出现错误。它只需要“roundedRect”作为参数。我将我的 rect 传递给该参数,但最终产品仍然带有尖角。有什么想法吗?

以上是关于SpriteKitNode 背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

CSSCSS 背景设置 ① ( 背景颜色 | 背景图片 | 背景平铺 )

背景颜色的配色技巧都有哪些

POI HSSF 自定义背景颜色和字体颜色

如何改变webView背景颜色?

HTML背景颜色和背景图片

word表格背景颜色设置 word表格如何设置背景颜色