1

我有一个 SpriteKit 游戏,里面有一个可以扔和拖的球。当它被抛出时,SKCamera 会跟随它。我想要的如下图所示:

我怎样才能建立这种障碍?

4

1 回答 1

2

一种方法可能是您创建一个添加 SKShapeNode 的函数,这是您的障碍。您可以使用数组保留障碍物列表,在该数组中添加所有障碍物并在第一个障碍物从视图中消失时移除它。这样,您的节点数将保持在较低水平,并且您可能会遇到无限量的障碍。

这是一个示例代码,当玩家通过游戏世界中最正确的障碍时会创建新的障碍。

private var obstacles = [SKShapeNode]()

private func addObstacle() {
    // Create obstacle aka SKShapeNode
    let obstacle = SKShapeNode(rectOf: CGSize(width: 50, height: 50))
    obstacle.fillColor = SKColor.white

    // If this is first obstacle, position it just beyond right side of the view. If not, get rightmost obstacles position and make a little gap between it and new obstacle.
    if let lastObstacle = self.obstacles.last {
        obstacle.position = CGPoint(x: lastObstacle.frame.maxX + self.frame.width/2, y: 0)
    } else {
        obstacle.position = CGPoint(x: self.frame.width/2 + obstacle.frame.width, y: 0)
    }

    // SKShapeNode have physicsbody where you can define categorybitmask etc
    obstacle.physicsBody?.categoryBitMask = ...

    // Add obstacle to the scene
    self.addChild(obstacle)

    // Add obstacle to array so we can keep record of those
    self.obstacles.append(obstacle)
}

override func update(_ currentTime: TimeInterval) {
    // If the rightmost obstacle come visible, create new obstacle
    if let lastObstacle = self.obstacles.last {
        if lastObstacle.frame.minX < self.camera.frame.maxX {
            self.addObstacle()
        }
    }

    // If arrays first obstacle is out of view, remove it from view and array
    if (self.obstacles.first?.frame.maxX ?? 0) < self.camera.frame.minX {
        self.obstacles.first?.removeFromParent()
        self.obstacles.removeFirst()
    }
}
于 2017-06-28T16:49:25.103 回答