我有这个最小可重现代码:
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
}
}
}
我将场景套件内容的背景颜色设置为红色,但结果是深色屏幕。
确实很奇怪,
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)
}
}