具有SpriteView和SwiftUI的场景不会填充整个屏幕

具有SpriteView和SwiftUI的场景不会填充整个屏幕,swiftui,sprite-kit,scenekit,Swiftui,Sprite Kit,Scenekit,我正试图在Project1上工作,并使用SpriteKit和SwiftUI,但由于某些原因,我的iPad上的整个屏幕从未出现过这样的场景 import SwiftUI import SpriteKit struct ContentView: View { var scene: SKScene { let screenWidth = UIScreen.main.bounds.width let screenHeight = UIScreen.main.b

我正试图在Project1上工作,并使用SpriteKit和SwiftUI,但由于某些原因,我的iPad上的整个屏幕从未出现过这样的场景

import SwiftUI
import SpriteKit

struct ContentView: View {
    var scene: SKScene {
        let screenWidth  = UIScreen.main.bounds.width
        let screenHeight = UIScreen.main.bounds.height
        
        let scene = GameScene()
        scene.size = CGSize(width: screenHeight, height: screenWidth)
        scene.scaleMode = .fill
        scene.backgroundColor = .green
        return scene
    }
    
    var body: some View {
        let screenWidth  = UIScreen.main.bounds.width
        let screenHeight = UIScreen.main.bounds.height
        
        print(screenWidth)
        
        return SpriteView(scene: scene)
            .frame(width: screenWidth, height: screenHeight)
            .ignoresSafeArea()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
现在看起来是这样的:

你知道我错过了什么吗


Max

在场景属性中有“宽度处的高度”和“高度处的宽度”参数。(如何在评论中提到@aheze)

最后通过将背景放在ContentView的ZStack()中修复了它

var body: some View {
        let screenWidth  = UIScreen.main.bounds.width
        let screenHeight = UIScreen.main.bounds.height
        
        ZStack{
            EmptyView()
            Image("road")
                .resizable()
                .aspectRatio(contentMode: .fill)
                .ignoresSafeArea()
            
            SpriteView(scene: scene, options: [.allowsTransparency])
                .frame(width: screenWidth, height: screenHeight)
                .ignoresSafeArea()
        }
    }
}
由于某些原因,当我将纹理添加到GameSecene类中时,无论我尝试使用何种比例,它都不会将纹理放大到全屏大小:

let background = SKSpriteNode(imageNamed: "road")
        
        background.zPosition = -1
//      background.scale(to: CGSize(width: 1180, height: 700))
//      background.scale(to: CGSize(width: CGFloat(1180), height: CGFloat(820)))
        addChild(background)

尝试移除
.frame(width:screenWidth,height:screenHeight)
,并将
CGSize(width:screenHeight,height:screenWidth)
替换为
CGSize(width:screenWidth,height:screenHeight)
,即使我将其更改为不会将棕色背景纹理缩放为全屏大小(属于游戏场景类的一部分)``let background=SKSpriteNode(imageNamed:“road”)background.zPosition=-1//background.scale(to:CGSize(width:1180,height:700))///background.scale(to:CGSize(width:CGFloat(1180),height:CGFloat(820)))addChild(background)``最后我将背景放在ZStack{}中进行了修复(更新了我的帖子)