3

假设我有一个定义为 320x2000 的 SKScene。我会将它显示在 320x480 屏幕上,因此它不会在给定时间显示所有内容。现在我想要一个英雄飞过场景,这样他总有一天会到达 y=2000 场景的尽头。为此,我有一台相机。像这样实现:

let theCamera = SKCameraNode()

class GameScene: SKScene, SKPhysicsContactDelegate {
    let player: Hero()
    override func didMoveToView(view: SKView) {
        // ...
        scene!.scaleMode = SKSceneScaleMode.ResizeFill
        super.didMoveToView(view)
        // ...
        player.setPosition(view.bounds.size.width / 2, y: view.bounds.size.height / 5)
        // ...
        self.camera = theCamera
        self.camera?.position = player.position
    }

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */

        // Let the player fly and the camera follow him
        player.position.y += 1
        self.camera?.position = player.position
    }
}

发生的情况是 a) 我的场景不会从屏幕底部开始,有大约 30% 的屏幕大小的空白位。b) 在场景中“飞行”了一段时间后,玩家精灵消失了。

另外,我在 didMoveToView() AND update() 中使用了这个调试代码:

print("DEBUG: BOUNDS \(self.view?.bounds)")
print("DEBUG: PLAYER \(player.position))")
print("DEBUG: SCENE \(self.scene?.size)")

这是 didMoveToView() 的输出:

DEBUG: BOUNDS Optional((0.0, 0.0, 320.0, 480.0))
DEBUG: PLAYER (160.0, 96.0))
DEBUG: SCENE Optional((320.0, 2000.0))

这是 update() 的输出:

DEBUG: BOUNDS Optional((0.0, 0.0, 320.0, 480.0))
DEBUG: PLAYER (160.0, 96.0))
DEBUG: SCENE Optional((320.0, 480.0))

所以:我的场景以某种方式调整大小。我想我在这里做错了什么。我只是想要一个大的(比设备的视图更大的)场景部分出现在视图中,让玩家能够飞过场景直到它结束。另外我正在使用 .ResizeFill 让场景/视图适应用户设备的大小。这就是为什么我选择 320 的宽度 - 它应该很容易缩放到彼此的苹果设备尺寸。但不知何故,这不适用于 iPhone 6s+ 模拟器。

感谢您对我在视图/场景/相机设置方面做错的任何建议。

4

0 回答 0