如何逐步加速节点下降?

时间:2016-02-07 17:16:57

标签: swift sprite-kit skaction

我有两个从屏幕顶部相互平行的点,它们与底部的两个圆圈相匹配,可以通过触摸旋转。我有他们这样生成:

  class GameScene: SKScene {
    override func didMoveToView(view: SKView) {


   runAction(SKAction.repeatActionForever(
        SKAction.sequence([
            SKAction.runBlock(generateDots),
            SKAction.waitForDuration(1.0)])))
    }
func generateDots() {
         let count = 2
    let index=Int(arc4random_uniform(UInt32(count)))
    let dots = SKSpriteNode(imageNamed: "Color\(index+1)")
    dots.physicsBody = SKPhysicsBody(circleOfRadius: 10)
    dots.physicsBody?.dynamic = true
    dots.physicsBody?.affectedByGravity = false
    for i in 0..<2 {
        dots.physicsBody?.categoryBitMask = UInt32(0x1 << index)
        dots.physicsBody?.contactTestBitMask = UInt32(0x1 << index)

    }

    addChild(dots)
    dots.size = CGSizeMake(45, 45)

    dots.position = CGPointMake(150, 400)
    dots.runAction(
        SKAction.moveByX(0, y: -900,
            duration: NSTimeInterval(11.5)))

          }
   }

有没有办法逐步加快它们下降的速度或逐渐改变waitForDuration,以便随着时间的推移它会每3秒生成一个节点,然后是2秒,然后是1秒等等?

1 个答案:

答案 0 :(得分:1)

这是完全可行的!你只需要添加一些变量。

如果你想改变它们下降的速度,你需要制作一个像

这样的变量
Var droptime:NSTimeInterval = 11.5

然后在你的&#34; dropdot()&#34;方法你需要做两件事。

  1. 在开头减去或删除你的droptime变量,如...

    Droptime - = 1

  2. 然后在生成下降动作结束时将其设为

    持续时间:停机时间

  3. 而不是以前的样子。

    如果你想让生成时间更短,那么你需要创建一个函数,你可以在每次想要进行场景运行的动作时触发(就像你在viewdidload中所做的那样)并编辑它以便它有变量等待并触发自身。此外,您需要在didMoveToView方法中自行触发一次。

        func controlMethod() {
        waitdur -= 1
        runAction(SKAction.repeatActionForever( SKAction.sequence([
                        SKAction.runBlock(generateDots),
                        SKAction.waitForDuration(waitdur),
    SKAction.runBlock(controlMethod)
        ])))
        } 
    
    祝你好运!

    很抱歉格式化!我在手机上...希望有人能解决它。