【问题标题】:How would I repeat an action forever in Swift?我如何在 Swift 中永远重复一个动作?
【发布时间】:2018-05-30 03:02:33
【问题描述】:

http://i.imgur.com/xkWTk9i.png我已经让这个矩形从上到下。我遇到的问题是我希望它每 2 秒重复一次,以便另一个矩形跟随它。我希望我的代码每 2 秒生成一次矩形,并让它像 flappy bird 中的绿色管道一样重复。谢谢你。 (我之前得到了这个工作,但我错误地删除了我的项目,并且无法弄清楚我是如何做到的。)我在使用 Spritekit 的 Swift 中。

 class GameScene: SKScene {
   let sprite = SKSpriteNode(imageNamed: "Rectangle 12")

   override func didMoveToView(view: SKView) {
     self.addChild(sprite)

      //run doAction function
      doAction()

   }


   //movement of rectangle


  func createRectangle() {
    let moveToBottom = SKAction.moveByX(0, y: 0 - self.frame.size.width , duration:  
    NSTimeInterval (3.0))

    let removeTheNode = SKAction.removeFromParent()
    let moveAndRemovePipes = SKAction.sequence([moveToBottom, removeTheNode])
    let repeatAction = SKAction.repeatActionForever(moveAndRemovePipes)
    sprite.xScale = 1
    sprite.yScale = 1
    sprite.position = CGPoint(x:0,y:0)
    sprite.runAction(repeatAction)


  }
  //spawn multiple rectangles after 3 or 4 seconds

  func doAction() {
    let generateRectangles = SKAction.sequence([
    SKAction.runBlock(self.createRectangle),
    SKAction.waitForDuration(NSTimeInterval(3.0))])
    let endlessAction = SKAction.repeatActionForever(generateRectangles)
    runAction(endlessAction)
  }
}

【问题讨论】:

    标签: xcode swift


    【解决方案1】:

    您可以使用NSTimer 重复执行函数。

    override func didMoveToView(view: SKView) {
         self.addChild(sprite)
    
           var timer = NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: "doAction", userInfo: nil, repeats: true)
    
       }
    

    这将每 2 秒重复一次您的函数执行。

    编辑:

    你也可以这样做:

    override func didMoveToView(view: SKView) {
     self.addChild(sprite)
    
     runAction(SKAction.repeatActionForever(SKAction.sequence([SKAction.runBlock(doAction), SKAction.waitForDuration(1.0)])))
    
    }
    

    【讨论】:

    • 我是否必须更改 createRectangle 和 doAction 函数的持续时间?它的速度非常快。
    • 您要求 2 秒,所以我设置为 0.2,但如果您想执行该功能以减慢速度,请增加时间。
    【解决方案2】:
    run(SKAction.repeatForever(SKAction.sequence([SKAction.run(doAction), SKAction.wait(forDuration: 2.0)])))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      相关资源
      最近更新 更多