У меня проблема, когда расстояние до моих платформ становится испорченным после достижения определенного результата. Я хочу, чтобы игра начиналась точно так же, как часть spawnDelayForever в touchhesBegan, пока счет не достигнет 5. После того, как оценка достигает 5 ... 10 ... 15 и так далее, я хочу, чтобы платформы могли ускоряться с таким же объемом пространства в между каждой икру независимо от того, что. Проблема заключается в том, когда оценка достигает 5, скорость платформ, но расстояние/пространство между каждой икрой не то же самое. Они еще больше обособлены. Кто-нибудь может мне помочь?Spritekit - Увеличивает скорость и сохраняет одинаковое расстояние между узлами спрайтов?
Надеюсь, это никого не смутило, но если бы это позволило мне прояснить это. Я просто хочу, чтобы платформы ускорялись после того, как определенная оценка была достигнута с таким же количеством пространства между каждой икрой. Значение waitForDuration должно ускоряться (менее 2.0) с каждым увеличением скорости.
Часть моего кода:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
if gameStarted == false {
gameStarted = true
ball.physicsBody?.affectedByGravity = true
title.removeFromParent()
let spawn = SKAction.runBlock({
()in
self.creatingPlatforms()
})
let delay = SKAction.waitForDuration(2.0)
let spawnDelay = SKAction.sequence([spawn, delay])
let spawnDelayForever = SKAction.repeatActionForever(spawnDelay)
self.runAction(spawnDelayForever)
let distance = CGFloat(self.frame.width + 170 + officialPlatform.frame.width)
let movePlatforms = SKAction.moveByX(-distance, y: 0, duration: NSTimeInterval(0.01 * distance))
let removePlatforms = SKAction.removeFromParent()
moveAndRemove = SKAction.sequence([movePlatforms, removePlatforms])
ball.physicsBody?.velocity = CGVectorMake(0, 0)
ball.physicsBody?.applyImpulse(CGVectorMake(0, 0))
scoreLbl.fontSize = 35
scoreLbl.position = CGPoint(x: self.frame.width/2, y: scene!.frame.height/2 + 300)
scoreLbl.fontColor = UIColor.blackColor()
scoreLbl.text = "\(score)"
score = 0
self.addChild(scoreLbl)
}
else {
ball.physicsBody?.velocity = CGVectorMake(0, 0)
ball.physicsBody?.applyImpulse(CGVectorMake(0, 45))
ball.physicsBody?.restitution = 0
scoreNode.physicsBody?.restitution = 0
}
}
func creatingPlatforms() {
scoreNode = SKSpriteNode()
scoreNode.size = CGSize(width: 120, height: 25)
scoreNode.position = CGPoint(x: self.frame.width + 95, y: self.frame.height/2)
scoreNode.physicsBody = SKPhysicsBody(rectangleOfSize: scoreNode.size)
scoreNode.physicsBody?.affectedByGravity = false
scoreNode.physicsBody?.dynamic = false
scoreNode.physicsBody?.categoryBitMask = physicsCategory.score
scoreNode.physicsBody?.collisionBitMask = 0
scoreNode.physicsBody?.contactTestBitMask = physicsCategory.ball
scoreNode.name = "scoreNode"
officialPlatform = SKNode()
let platform = SKSpriteNode(imageNamed: "platform")
platform.size = CGSize(width: 140, height: 25)
platform.position = CGPoint(x: self.frame.width + 95, y: self.frame.height/2)
platform.physicsBody = SKPhysicsBody(rectangleOfSize: platform.size)
platform.physicsBody?.categoryBitMask = physicsCategory.platform
platform.physicsBody?.collisionBitMask = physicsCategory.ball
platform.physicsBody?.contactTestBitMask = physicsCategory.ball
platform.physicsBody?.affectedByGravity = false
platform.physicsBody?.dynamic = false
officialPlatform.name = "official platform"
officialPlatform.runAction(moveAndRemove)
officialPlatform.addChild(platform)
officialPlatform.addChild(scoreNode)
self.addChild(officialPlatform)
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
if score >= 5 && score <= 9 {
moveAndRemove.speed = 0.9
}
}
}
Не могли бы вы добавить их все в качестве ребенка на один более крупный узел и просто переместить этот более крупный узел? –
@BeauNouvelle Я не уверен, если вы имеете в виду платформу или что-то еще, но платформа, которая нерестится, находится в более крупном узле (пусть платформа = SKSpriteNode) = (officialPlatform = SKNode). В SKNode, официальная платформа, выполняется действие moveAndRemove, которое вызывается в touchhesBegan. Вопрос в том, как можно обновлять SKActions spawnDelayForever и moveAndRemove каждый раз, когда будет достигнута определенная оценка? –