Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在SpriteKit中模拟比屏幕更大的世界?_Ios_Swift_Sprite Kit - Fatal编程技术网

Ios 如何在SpriteKit中模拟比屏幕更大的世界?

Ios 如何在SpriteKit中模拟比屏幕更大的世界?,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正在寻找合适的SpriteKit方法来处理可滚动的世界。考虑下面的图像: 在这个人为的例子中,世界边界是虚线,蓝点可以在这些边界内的任何地方移动。然而,在任何给定的点,这个世界的一部分可以存在于屏幕外,如图所示。我想知道如何在“世界”的任何地方移动蓝点,同时保持相机固定在蓝点上。 有一个很好的答案,我目前找不到。其基本思想是: 将“世界”节点添加到场景中。您可以给它一个大于屏幕大小的宽度/高度 当您“移动”角色(或蓝点)时,实际上您移动了您的世界节点,但方向相反,这会给人一种您正在移动的印象

我正在寻找合适的SpriteKit方法来处理可滚动的世界。考虑下面的图像:

在这个人为的例子中,世界边界是虚线,蓝点可以在这些边界内的任何地方移动。然而,在任何给定的点,这个世界的一部分可以存在于屏幕外,如图所示。我想知道如何在“世界”的任何地方移动蓝点,同时保持相机固定在蓝点上。

有一个很好的答案,我目前找不到。其基本思想是:

  • 将“世界”节点添加到场景中。您可以给它一个大于屏幕大小的宽度/高度
  • 当您“移动”角色(或蓝点)时,实际上您移动了您的世界节点,但方向相反,这会给人一种您正在移动的印象 这样,屏幕总是以蓝点为中心,而你周围的世界却在移动

    下面是我不久前进行实验时的一个例子:

    override func didMoveToView(view: SKView) {
            self.anchorPoint = CGPointMake(0.5, 0.5)
            //self.size = CGSizeMake(600, 600)
    
            // Add world
            world = SKShapeNode(rectOfSize: CGSize(width: 500, height: 500))
            world.fillColor = SKColor.whiteColor()
            world.position = CGPoint(x: size.width * 0.5, y: size.height * 0.5)
            world.physicsBody?.usesPreciseCollisionDetection = true
            self.addChild(world)
    }
    
    override func update(currentTime: CFTimeInterval) {
            world.position.x = -player.position.x
            world.position.y = -player.position.y
    }
    
    如果您创建一个“摄影机”节点,并将其添加到“世界”节点中,则有两个简单的函数(如上)允许您在摄影机节点在世界中移动时“跟踪”该节点,尽管实际上您正在移动世界,这与Abdul Ahmad的回答类似

    此方法允许您在相机上使用SpriteKit功能。您可以对其应用物理,对其运行操作,对其施加约束,允许以下效果:

    • 摄像机抖动(动作)
    • 碰撞(物理实体,或将另一个节点的位置与物理实体匹配)
    • 滞后跟随(例如,在摄影机上放置约束,使其与角色保持一定距离)

    这种限制尤其为移动的世界增添了一种美妙的触感,因为它允许“主角”在接近屏幕边缘时自由地移动世界。

    我刚才也问过这个问题。。有趣的是,对我们来说,这是一个如此令人困惑的想法,noob game Devsthere有一个很好的答案,我现在正试图为你找到,明白了吗。我想我错过了“世界”节点的概念。这是有道理的。谢谢你的帮助。没问题,几个月前我也很困惑。我很高兴能帮上忙
    override func didSimulatePhysics() {
        self.centerOnNode(self.camera)
    }
    
    func centerOnNode(node: SKNode) {
            if let parent = node.parent {
                let nodePositionInScene: CGPoint = node.scene!.convertPoint(node.position, fromNode: parent)
                parent.position = CGPoint(
                        x: parent.position.x - nodePositionInScene.x,
                        y: parent.position.y - nodePositionInScene.y)
            }}