假设我有一个定义为 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+ 模拟器。
感谢您对我在视图/场景/相机设置方面做错的任何建议。