1
ボールを投げてドラッグすることができるSpriteKitゲームがあります。それが投げられると、SKCameraはそれに従います。私はしたいが下図に示します。SpriteKitゲームで無限の障害物を左に動かす
どのように私は障害物のこの種を構築することができますか?
ボールを投げてドラッグすることができるSpriteKitゲームがあります。それが投げられると、SKCameraはそれに従います。私はしたいが下図に示します。SpriteKitゲームで無限の障害物を左に動かす
どのように私は障害物のこの種を構築することができますか?
あなたの障害である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()
}
}
問題は、カメラが常に右に移動し、障害物が視界にとどまっていないことです。 –
その後、障害物を移動する必要はありませんか?上記のコードを編集しました。現在、障害物は静止しており、右端の障害物が見えてくると新しい障害物ができます。 – Jyri
彼は障害物が一定の速度で左に動いて欲しいと思う。 – Fluidity