2016-02-07 59 views
1

我有兩個從我的屏幕頂部相互平行的點,它們將與底部的兩個可以隨觸摸旋轉的圓相匹配。我讓他們產生這樣的:如何逐漸加速下降節點隨着時間的推移?

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

這可能是你要找的東西http://stackoverflow.com/questions/34624292/change-time-interval-in-skaction-waitforduration-as-game-goes-on – 0x141E

+0

非常感謝你!還有一種方法可以加速節點嗎? – KeepItSimple

+0

爲「moveByX」動作的持續時間參數定義一個變量,並在「遞歸」方法中減少該變量。 – 0x141E

回答

1

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

如果你想改變他們如何快速下跌,那麼你需要做一個變量像

Var droptime:NSTimeInterval = 11.5 

然後在你的「dropdot()」你需要做兩件事情的方法。

  1. 起初減去或devide您droptime變量像...

    Droptime - = 1在當你產生下降動作結束

  2. 然後使其

    時間:droptime

而不是以前的樣子。

如果您希望縮短生成時間,那麼您需要創建一個函數,每次您想讓場景運行的操作(如viewdidload中所做的操作)都可以觸發並進行編輯,以便它有可變的等待並觸發自己。您還需要在didMoveToView方法中自我觸發一次。

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

祝你好運!

對不起格式化!我在移動...希望有人可以修復它。

+0

這看起來很完美(和它的可讀哈哈)非常感謝! – KeepItSimple

+0

雖然很快,那麼'waitdur'的變量是什麼?會不會是'var waitdur:CGFloat = 0'或類似的東西? – KeepItSimple

+0

Var waitdur:NSTimeInterval = 1.0 –

相關問題