ios - Endless Runner 重新定位播放器,无论纵横比如何,难度均等

标签 ios swift sprite-kit

我正在使用 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/

相关文章:

ios - IOS 中的图像变形

ios - 在 Swift 中使用 XIB 自定义 UIView 子类

ios - 在显示之前在远程推送通知消息中格式化双倍

Swift:将多个 UnsafeMutablePointers 附加到一个

swift - 计算字符串 Swift 中的字母出现次数

ios - Swift 中如何计算坐标

swift - 仅在 iPhone X 和 iPhone 8 Plus 上游戏崩溃

ios - SpriteKit 中没有任何内容出现在场景中

ios - 从 Today Extension/Widget 打开设置应用程序?

ios - 为 View 中的所有标签添加边框