我正在使用 SpriteKit 为横向模式的 iPhone 创建无尽的运行者。我这样设置场景:
override func viewDidLayoutSubviews() {
let scene = GameScene(size: CGSize(width: 812, height: 375))
let skView = view as! SKView
scene.backgroundColor = UIColor.red
scene.scaleMode = .aspectFill
skView.presentScene(scene)
skView.showsFPS = true
skView.showsNodeCount = true
print("Screen Size: \(GlobalProperties.screenSize.width) x \(GlobalProperties.screenSize.height)")
print("Scene Size: \(scene.size.width) x \(scene.size.height)")
}
我想定位播放器,使播放器边缘和屏幕右边缘之间的像素数量相同,而不管纵横比如何。这是维持设备之间难度的合理做法吗?我有这样的布局设置:
override func didMove(to view: SKView) {
let player = SKSpriteNode(texture: SKTexture(imageNamed: "CuteMelon"))
player.anchorPoint = CGPoint(x: 0.5, y: 0.5)
player.position = CGPoint(x: frame.width - 600, y: frame.midY)
self.addChild(player)
let rect = SKSpriteNode(color: .orange, size: CGSize(width: 550, height: 200))
rect.anchorPoint = CGPoint(x: 1, y: 0.5)
rect.position = CGPoint(x: frame.width-50, y: frame.height/2)
self.addChild(rect)
}
我添加了矩形以查看在这两种情况下玩家是否距离右侧 600 像素(留下 50 像素的间隙以确保它不会跑出边缘)
结果如下:
iPhone XR:https://imgur.com/y6OYHkK按预期工作
iPhone 8:https://imgur.com/nkrx5By这不是将矩形放置在距框架右边界 50 像素的位置。
我该怎么做才能解决这个问题,或者我应该用完全不同的方式解决它?谢谢
最佳答案
只需计算出场景大小和屏幕大小之间的差异,然后将相机移动一半的距离即可。公式 abs((sceneWidth - screenWidth * sceneHeight/screenHeight)/2)
将为您提供。它所做的是将屏幕缩放到场景的任何高度,然后从宽度中减去两个差值并返回该值的一半。
override func didMove(to view: SKView) {
let widthPadding = abs((self.frame.width - (UIScreen.main.bounds.width * self.frame.height / UIScreen.main.bounds.height )) / 2)
self.camera = self.camera ?? SKCameraNode()
self.camera.position.x += widthPadding
let player = SKSpriteNode(texture: SKTexture(imageNamed: "CuteMelon"))
player.anchorPoint = CGPoint(x: 0.5, y: 0.5)
player.position = CGPoint(x: frame.width - 600, y: frame.midY)
self.addChild(player)
let rect = SKSpriteNode(color: .orange, size: CGSize(width: 550, height: 200))
rect.anchorPoint = CGPoint(x: 1, y: 0.5)
rect.position = CGPoint(x: frame.width-50, y: frame.height/2)
self.addChild(rect)
}
关于ios - Endless Runner 重新定位播放器,无论纵横比如何,难度均等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55131602/