问题描述
我已经习惯了精灵套件,并试图在设备框架周围制作一个简单的物理边框,以使精灵反弹。
但是,当运行我的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