SpriteKit边框不适合实际的iOS屏幕尺寸

问题描述

我已经习惯了精灵套件,并试图在设备框架周围制作一个简单的物理边框,以使精灵反弹。

但是,当运行我的iPhone XR应用程序时,其物理边框远低于设备的实际边框。我知道这一点,因为当球反弹到实际设备的框架下方并最终反弹时,意味着边框也位于下方。

这是我的代码

import SpriteKit
import GameplayKit

class GameScene: SKScene,SKPhysicsContactDelegate {
    
    var player:SKSpriteNode!
    
    var scoreLabel:SKLabelNode!
    var score:Int = 0 {
        didSet{
            scoreLabel.text = "score: \(score)"
        }
    }
    
    override func didMove(to view: SKView) {
        
        self.backgroundColor = UIColor.systemOrange
        
        
        
        player = SKSpriteNode(imageNamed: "ball")
        
        player.position = CGPoint(x: 100,y: player.size.height / 2)
        
        player.physicsBody = SKPhysicsBody(circleOfRadius: 20)
        
        player.physicsBody!.affectedByGravity = true
        
        self.addChild(player)
        
        self.physicsWorld.gravity = CGVector(dx: 0,dy: -9.8)
        self.physicsWorld.contactDelegate = self
        
        scoreLabel = SKLabelNode(text: "score: 0")
        scoreLabel.position = CGPoint(x: 100,y: 100)
        scoreLabel.fontName = "AmericanTypeWriter-Bold"
        scoreLabel.fontSize = 36
        scoreLabel.fontColor = UIColor.black
        score = 0
        
        self.addChild(scoreLabel)
        
        let border = SKPhysicsBody(edgeLoopFrom: self.frame)
         //create variable representing the frame or border of the gamescene
        
         border.friction = 0 //we don't want friction to the borders
        border.restitution = 1 //we want bouncyness to the borders
        
         self.physicsBody = border
    }
    
    
    
    
    
    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered
    }
}

解决方法

只需修复它即可。

在GameViewController.swift中添加以下代码行

    scene.size = view.bounds.size

这将使用默认代码

   scene.scaleMode = .aspectFill