2017-06-28 14 views

答えて

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() 
    } 
} 
+0

問題は、カメラが常に右に移動し、障害物が視界にとどまっていないことです。 –

+0

その後、障害物を移動する必要はありませんか?上記のコードを編集しました。現在、障害物は静止しており、右端の障害物が見えてくると新しい障害物ができます。 – Jyri

+0

彼は障害物が一定の速度で左に動いて欲しいと思う。 – Fluidity

関連する問題