我想使我的游戏全屏显示,而不是在两侧和底部都带有黑条。因此我为此找到了这段代码,它适用于场景,现在可以全屏显示,但是资产放置不正确。由于视图的坐标不同(不知道为什么会因为以前的原因而尝试为safeAreaLayoutGuide
设置所有坐标,但后来得到黑条)。因此,有什么办法可以将其设置回0.5 0.5。否则,我将不得不将场景的anchorPoint
退回到视图的anchorPoint
,并根据此设置我的sks文件中的所有资产。
这是GameViewController
中的代码:
class GameViewController: UIViewController {
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if let view = self.view as! SKView? {
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
let scene = HomeScene(size: view.bounds.size)
scene.scaleMode = .aspectFill
view.presentScene(scene)
}
}
override func viewDidLoad() {
super.viewDidLoad()
print("---")
print("∙ \(type(of: self))")
print("---")
}
}
来自HomeScene
的代码:
let rectangle1 = SKShapeNode(rect: (self.view?.bounds)!)
rectangle1.strokeColor = .white
rectangle1.lineWidth = 20
addChild(rectangle1)
// Set (0, 0) as the centre of the screen
scene?.anchorPoint = CGPoint(x: 0.5, y: 0.5)
let rectangle = SKShapeNode(rect: self.frame)
rectangle.strokeColor = .green
rectangle.lineWidth = 20
addChild(rectangle)
这就是场景在0.5、0.5处的外观,但是视图高于该视图,绿色是场景,白色是视图,视图中间是按钮:
谢谢。
答案 0 :(得分:0)
您可以使用其他锚点来解决问题,或者可以将白色“视图”节点在场景中的位置不同。
有关坐标系(和锚点)的信息:apple documentation
根据文档,默认锚位置为(0.5,0.5)。将白色视图置于左下角:将x和y的宽度和高度减半。请注意,线宽也会影响定位。将白色视图置于左下方:
let bottomLeft: CGPoint = CGPoint(x: -self.size.width/2 + rectangle1.lineWidth/2,
y: -self.size.height/2 + rectangle1.lineWidth/2)
rectangle1.position = bottomLeft
要使白色视图在绿色视图中居中,请减去矩形1的宽度和高度(再次注意线宽)
let center: CGPoint = CGPoint(x: -rectangle1.frame.size.width/2 + rectangle1.lineWidth/2,
y: -rectangle1.frame.size.height/2 + rectangle1.lineWidth/2)
rectangle1.position = center
请注意,您的绿色视图位于白色视图上方。将白色视图的z位置设置为某个正数,以将其排列在绿色视图上方
rectangle1.zPosition = 1
答案 1 :(得分:0)
如果要从.sks文件加载HomeScene,则xcode将anchorPoint设置为(0.5,0.5),如图所示。
但是,当您尝试创建自定义类而不从文件(.sks)加载它时,将没有像此处那样设置属性。因此,您需要手动设置。
let scene = HomeScene(size: view.bounds.size)
// at this point, you HomeScene has the anchorPoint set to (0.0, 0.0)
// lets set it back to (0.5, 0.5) as we want
scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
scene.scaleMode = .aspectFill
view.presentScene(scene)