我有一个功能,篮球。我希望能够在常规时间间隔内在CGPoint(515,700)(屏幕顶部)生成我的basketBall节点。我知道的唯一可以完成等待几秒钟的方法就是sleep();但是,sleep()显然不允许SpriteNodes保留在屏幕上,所以我需要一个替代方案。
我发现了NSTimeInterval,但我更愿意避免导入Foundation。我认为SKAction允许时间通过waitForDuration(),但我很困惑它是如何工作的。有人能否对SpriteKit的SKAction有所了解?
override func didMoveToView(view: SKView) {
let basketBall = SKSpriteNode(imageNamed: "basketball")
let waitForObjects = SKAction.waitForDuration(3)
let basketBallFalls = SKAction.runBlock({
self.Basketball()
})
let action = SKAction.sequence([waitForObjects, basketBallFalls])
SKAction.runAction(action, onChildWithName: "basketball")
SKAction.repeatActionForever(action)
//Basketball()
}
func Basketball(){
basketBall.position = CGPointMake(515, 700)
basketBall.size = CGSizeMake(50, 50)
basketBall.size = CGSize(width: 50.0, height: 50.0)
basketBall.zPosition = 10
basketBall.physicsBody = SKPhysicsBody(circleOfRadius: 25.0)
basketBall.physicsBody?.mass = 0.8
basketBall.physicsBody?.restitution = 0.6
basketBall.physicsBody?.dynamic = true
self.addChild(basketBall)
}
答案 0 :(得分:4)
尝试使用SKAction.waitForDuration(_:)
。
实施例。像这样的东西:
let waitDuration = NSTimeInterval(arc4random_uniform(20))
let waitAction = SKAction.waitForDuration(waitDuration)
let ballAction = SKAction.runBlock(self.Basketball) //call your function
runAction(SKAction.sequence([waitAction, ballAction]))
答案 1 :(得分:2)
有两种直接的方法可以定期生成新节点。它们都涉及你的场景。
每帧调用场景的update(_:)
方法,参数是当前时间。向场景类添加NSTimeInterval
属性,该属性将存储您上次创建篮球的时间。在update(_:)
中,从上一个生成时间中减去当前时间。如果差异大于您想要的间隔,则生成一个新节点并保留新的当前时间。
您的场景也可以像任何其他节点一样运行操作。 SKAction
有一个waitForDuration(_:)
方法,可以创建一个与其名称完全相同的操作。您可以使用将执行产卵的SKAction.runBlock(_:)
创建另一个操作。然后创建a sequence action运行延迟操作,然后执行spawn操作。将其包裹在repeatActionForever(_:)
中,最后告诉您的场景运行转发器操作。