繁体   English   中英

如何使用SpriteKit的SKAction为SKSpriteNode创建时间间隔?

[英]How do I use SpriteKit's SKAction to create a time interval for an SKSpriteNode?

我有功能,篮球。 我希望能够以固定的时间间隔在屏幕顶部的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)
}

尝试使用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]))

有两种直接的方法可以定期产生新节点。 它们都涉及您的场景。

场景的update(_:)方法每帧调用一次,参数为当前时间。 NSTimeInterval属性添加到场景类中,该属性将存储您上次创建篮球的时间。 update(_:) ,从上一个生成时间中减去当前时间。 如果差异大于所需的时间间隔,则生成一个新节点并保留新的当前时间。

您的场景还可以像其他任何节点一样运行动作。 SKAction具有一个waitForDuration(_:)方法,该方法创建一个动作,该动作确实可以按其名称所述。 您可以使用SKAction.runBlock(_:)创建另一个动作来执行生成。 然后创建一个顺序操作 ,该操作先运行延迟操作,然后再生成操作。 将其包装在repeatActionForever(_:) ,最后告诉场景运行转发器动作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM