繁体   English   中英

SKAction.moveToX重复更改值

[英]SKAction.moveToX repeat with value change

我希望能够每移动20个像素就可以暂停移动球,我尝试了一次,但是什么也不做,球一直停留在开始的位置,它没有移动到屏幕的尽头,我知道我没有不要放置waitForDuration,因为我想检查它是否会移动

func spwan()
{
    let ball:SKSpriteNode = SKScene(fileNamed: "Ball")?.childNodeWithName("ball") as! SKSpriteNode
    ball.removeFromParent()
    self.addChild(ball)
    ball.name = "spriteToTrack"
    ball.zPosition = 0
    ball.position = CGPointMake(1950, 1000)
    var num:CGFloat = ball.position.x
    let a1 = SKAction.moveToX(num - 20, duration: 10)
    // i want to get to -50 let a1 = SKAction.moveToX(-50 , duration: 10)       
    let minus = SKAction.runBlock{
        num -= 20
    }
    let sq1 = SKAction.sequence([a1,minus])
    ball.runAction(SKAction.repeatAction(sq1, count: 10)      
}

在以上代码中,球至少应移动20个像素,但在10秒内可能会停顿20个像素。 无论如何,我认为您通过使用moveToX而不是moveBy:使事情复杂化了很多,因此(稍加重新调整)您可能会更好,例如:

func spawn() {
    let x: CGFloat = 1950
    let xDelta: CGFloat = -20
    let xDestination: CGFloat = -50
    let repeats = Int((x - xDestination)/fabs(xDelta))

    let move = SKAction.moveBy(CGVectorMake(xDelta, 0), duration: 2) // made it a lot quicker to show that stuff is happening
    move.timingMode = .EaseInEaseOut

    let ball:SKSpriteNode = SKScene(fileNamed: "Ball")?.childNodeWithName("ball") as! SKSpriteNode
    ball.removeFromParent()
    ball.name = "spriteToTrack"

    ball.position = CGPointMake(x, 1000)

    addChild(ball)
    ball.runAction(SKAction.repeatAction(move, count: repeats))
}

暂无
暂无

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

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