SpriteKit - SKView / SKScene / SKCameraNode组合会产生问题

时间:2015-12-28 18:34:03

标签: ios swift sprite-kit skscene skview

假设我将SKScene定义为320x2000。我将在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()和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 + Simulator。

感谢您在视频/场景/相机设置方面的任何建议。

0 个答案:

没有答案