2016-06-29 9 views
0

나는 20 픽셀 간격으로 움직여서 공을 움직일 수 있기를 원합니다. 이걸 시도했지만 아무 것도하지 않았습니다. 공이 움직이지 않는 지점에 머물러 있습니다. 화면의 끝, 나는값 변경이있는 SKAction.moveToX 반복

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)  
} 
+0

아주 좋은, 내가 본 : 어쨌든 난 당신이 이런 일에 아마 더 좋을 것 같아 (rejigging의 비트와 함께) 그래서, moveToX를 사용하기보다는 moveBy:에 의해 overcomplicated 것들을 꽤 것 같아요 당신은 좋은 대답을 받았습니다. 행운을 빕니다 –

답변

2

을 움직 것입니다 있는지 확인하고 싶었 여부 때문에 볼이 위의 코드에서 최소한 20 픽셀 이동해야, 내가 waitForDuration를 두지 않았다 알고 있지만 20 개 픽셀 10 초 후에 정지 상태로 보일 수 있습니다.

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)) 
}