2016-03-21 3 views
1

У меня есть функция, баскетбол. Я хочу, чтобы у меня появился узел basketBall в CGPoint (515,700), в верхней части экрана, в обычный временной интервал. Единственный метод, который я знал, что будет ждать несколько секунд, - sleep(); однако sleep(), по-видимому, не позволяет SpriteNodes оставаться на экране, поэтому мне нужна альтернатива.Как использовать SKAction SpriteKit для создания временного интервала для SKSpriteNode?

Я обнаружил NSTimeInterval, но я бы предпочел воздержаться от импорта Фонда. Я думаю, что SKAction позволяет время проходить через waitForDuration(), но я очень смущен относительно того, как это работает. Может кто-то пролил свет на SKAction от SpriteKit?

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) 
} 

ответ

4

Попробуйте использовать SKAction.waitForDuration(_:).

Ex. что-то вроде этого:

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])) 
2

Существует два простых способа создать новый узел с регулярным интервалом. Они оба связаны с вашей сценой.

Метод сцены update(_:) вызывается каждый кадр, а аргумент - текущее время. Добавьте свойство NSTimeInterval в свой класс сцены, который будет хранить последний раз, когда вы создали баскетбол. В update(_:) вычесть текущее время с последнего времени появления. Если разница больше требуемого интервала, создайте новый узел и сохраните новое текущее время.

Ваша сцена также может запускать действия, как и любой другой узел. SKAction имеет метод waitForDuration(_:), который создает действие, которое точно соответствует его названию. Вы можете создать другое действие, используя SKAction.runBlock(_:), который будет выполнять нерестилище. Затем создайте a sequence action, который запускает действие задержки, за которым следует действие икры. Оберните это в repeatActionForever(_:) и, наконец, скажите своей сцене, чтобы запустить действие ретранслятора.

Смежные вопросы