【问题标题】:Swift SKAction moveTo bottom of screenSwift SKAction 移动到屏幕底部
【发布时间】:2014-10-26 02:06:07
【问题描述】:

我试图让我的两个精灵节点从屏幕顶部下降到屏幕底部,回到它们的起始位置然后再次下降,但是在它们达到大约 3/4 的那一刻在屏幕下方的过程中,它们会稍微“传送”到屏幕上方,然后从那里继续下落,然后再“传送”回来一点,最终它们按预期从屏幕底部掉落。这是我所拥有的:

override func didMoveToView(view: SKView) {

    bounds = UIScreen.mainScreen().bounds
    height = bounds.size.height

    initFruit()
    fallTimer = NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: "fall_timer", userInfo: nil, repeats: true)
}

func initFruit(){

    fruit1 = SKSpriteNode(imageNamed: "Fruit_Apple")
    fruit2 = SKSpriteNode(imageNamed: "Fruit_Banana")

    fruit1.xScale = 2.5
    fruit1.yScale = 2.5
    fruit2.xScale = 2.5
    fruit2.yScale = 2.5

    //position fruit off the top of the screen, at separate x coordinates
    fruit1.position = CGPoint(x: (size.width / 3), y: height + fruit1.frame.height)
    fruit2.position = CGPoint(x: (size.width / 3) * 2, y: height + fruit1.frame.height)

    addChild(fruit1)
    addChild(fruit2)
}

func fall_timer() {
    var fallDuration: NSTimeInterval
    var moveActionDown: SKAction

    //If fruit are at the bottom, move them back up to the top
    if fruit1.position.y == -100 {
        fruit1.position.y = CGFloat(height + fruit1.frame.height)
        fruit2.position.y = CGFloat(height + fruit1.frame.height)
    }
    if fruit3.position.y == -100 {
        fruit3.position.y = CGFloat(height + fruit1.frame.height)
        fruit4.position.y = CGFloat(height + fruit1.frame.height)
    }

    //Check if fruit are at top, ready to fall again
    if fruit1.position.y == height + fruit1.frame.height {
        fallDuration = NSTimeInterval(arc4random_uniform(6) + 2)
        moveActionDown = SKAction.moveToY(-100.0, duration: fallDuration)
        fruit1.runAction(moveActionDown)
    }
    if fruit2.position.y == height + fruit1.frame.height {
        fallDuration = NSTimeInterval(arc4random_uniform(6) + 2)
        moveActionDown = SKAction.moveToY(-100.0, duration: fallDuration)
        fruit2.runAction(moveActionDown)
    }

}

我一辈子都想不通为什么会发生这种情况。它只在第一个秋天发生。第一次落下后,果实完美落下并如预期般回到顶部。

【问题讨论】:

    标签: swift sprite-kit skaction


    【解决方案1】:

    你能不能对水果进行无休止的操作

    let fall=SKAction.repeatActionForever(SKAction.sequence([
        SKAction.moveToY(height, duration: 0),
        SKAction.moveToY(0, duration: 1)]))
    

    当他们到达底部时可能会跑一个块

    let fall=SKAction.repeatActionForever(SKAction.sequence([
        SKAction.moveToY(height, duration: 0),
        SKAction.moveToY(0, duration: 1),
        SKAction.runBlock({ () -> Void in
                println("reached bottom")
            })]))
    

    【讨论】:

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