SK3DNode 无法设置场景的背景颜色

问题描述 投票:0回答:1

我有这个最小可重现代码:


class GameViewController: UIViewController {
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    if let view = self.view as! SKView? {
      
      let scene = SKScene()
      let node3D = SK3DNode(viewportSize: CGSize(width: 200, height: 200))
      node3D.position = CGPoint(x: 100, y: 100)
      
      let scene3D = SCNScene()
      node3D.scnScene = scene3D
      scene.addChild(node3D)
      
      scene3D.background.contents = UIColor.red


      view.presentScene(scene)
      view.ignoresSiblingOrder = true
      view.showsFPS = true
      view.showsNodeCount = true
    }
  }
}

我将场景套件内容的背景颜色设置为红色,但结果是深色屏幕。

ios swift sprite-kit scenekit
1个回答
0
投票

确实很奇怪,

UIColor.red
不起作用。即使
CGColor
也没有按预期工作。 (根据文档,它应该可以工作)

但这就是解决问题的方法。我希望它符合您的要求。

场景初始化: 将

let scene = SKScene()
替换为:

let scene = SKScene(size: view.bounds.size)

背景颜色: 不要使用

scene3D.background.contents = UIColor.red
,而是使用固体 UIImage 作为颜色源。

scene3D.background.contents = UIImage(color: .red)

为此,您需要在代码中的某个位置包含此

extension
。它将生成具有给定颜色的 UIImage:

extension UIImage {
    convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
        UIGraphicsBeginImageContextWithOptions(size, false, 0)
        color.setFill()
        UIRectFill(CGRect(origin: .zero, size: size))
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        guard let cgImage = image?.cgImage else { return nil }
        self.init(cgImage: cgImage)
    }
}

结果:(向下滚动) Result Screen

© www.soinside.com 2019 - 2024. All rights reserved.