Swift - 在UIView上叠加SKScene - 灰色背景

3

我刚接触Swift和Xcode,正在尝试SpriteKit。我的做法是在main.storyboard中创建了一个UIView。这个名为overlayedGameSceneUIView只占据了屏幕的一半大小,所以你应该能看到主UIView(self.view)。

import UIKit
import SpriteKit
import GameplayKit

class GameViewController: UIViewController {
    @IBOutlet var overlayedGameScene: SKView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.blue
        self.view.alpha = 1

        if let theView = overlayedGameScene as SKView? {
            if let theScene = SKScene(fileNamed: "GameScene.sks") {
                theScene.scaleMode = .aspectFill

                theView.presentScene(theScene)
            }
        }
    }
}

它可以正常工作,但唯一的问题是当我在模拟器中运行它时,尽管我已经在Storyboard和编程中将其更改为蓝色,但主视图仍然是灰色的。我还在Storyboard和编程中更改了透明度。

以下是在模拟器中的样子。

我应该只是在主视图上再添加一个蓝色UIView吗?这种情况发生的原因是什么?


由于某些原因,在项目中任何位置添加“import SpriteKit”都会使您的初始视图控制器变灰。试试看。 - user3113182
1个回答

2
请注意您的 GameViewController 的视图:

enter image description here

默认情况下,它是一个 SKView

enter image description here

将它的 class 更改为 UIView 就可以了。另外,设置 SKViewbackgroundColor 没有效果。

谢谢,那帮了我很多!那正是我在寻找的小建议。 - K King
@KKing 没问题 :) 如果这个答案帮助了您解决问题,请考虑点击左上角的复选标记接受它。 - Whirlwind
“backgroundColor on an SKView has no effect”这句话并不完全正确,您可以将alpha设置为小于1,并将allowsTransparency标志设置为不渲染SKView的黑色部分。这样可以使用父视图来呈现静态图形(当您想要使用.aspectFill比例模式,但需要高分辨率背景时非常有效)。 - Knight0fDragon
@Knight0fDragon 这是正确的,但超出了问题的范围。 - DR Haus
@Knight0fDragon 但是它对你所说的没有影响...因为无论你设置什么颜色(backgroundColor),结果都是一样的。也许我误解了你的意思... - Whirlwind
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接