2017-03-21 3 views
3

나는 충돌로 내 배경이 움직이지 않도록하려합니다. ? 내가 bg.run을 중지 할 수 있습니다 방법함수 내에서 SKAction.repeatForever를 신속하게 중지 하시겠습니까?

let bgTexture = SKTexture(imageNamed: "bg.png") 
    let moveBGanimation = SKAction.move(by: CGVector(dx: 0, dy: -bgTexture.size().height), duration: 4) 
    let shiftBGAnimation = SKAction.move(by: CGVector(dx: 0, dy: bgTexture.size().height), duration: 0) 
    let moveBGForever = SKAction.repeatForever(SKAction.sequence([moveBGanimation, shiftBGAnimation])) 

    var i: CGFloat = 0 

    while i < 3 { 

     bg = SKSpriteNode(texture: bgTexture) 
     bg.position = CGPoint(x: self.frame.midX, y: bgTexture.size().height * i) 
     bg.size.width = self.frame.width 
     bg.zPosition = -2 

     bg.run(moveBGForever) 
     self.addChild(bg) 

     i += 1 


    } 

(moveBGForever 내가 해봤 bg.removeAllActions()도 주요하지만 아무튼에 추가 시도 :

이 만들고 이동 배경을 것입니다 . '는 t는

if contact.bodyA.categoryBitMask == ColliderType.object.rawValue || contact.bodyB.categoryBitMask == ColliderType.object.rawValue { 



} 
+1

내 솔루션으로 질문을 변경하지 말고주기 코드를 유지해야합니다. 그렇지 않으면 모든 스레드가 이해할 수 없게됩니다. 질문의 마지막 부분에 업데이트를 추가해야합니다. –

+0

예, 물론 되돌 렸습니다. 다시 지금! 카운트가있는 반복 작업에 어떻게 키를 추가 할 수 있습니까? ".repeat (yourBgActions, count : 3)" –

+1

예. 카운트 번호를 넣을 수있는 곳에 'SKAction.repeat' 액션을 새로 만들어야합니다. 당신이 해냈을 때'self.run (actionRepeated, withKey : "yourKey")' –

답변

4
당신이 작업을 반복하는 while주기를 작성해서는 안됩니다 때문에이 일이

을 아무것도 할,하지만 당신은 간단하게 작성해야합니다

let myCode = SKAction.run{ 
    bg = SKSpriteNode(texture: bgTexture) 
    bg.position = CGPoint(x: self.frame.midX, y: bgTexture.size().height * i) 
    bg.size.width = self.frame.width 
    bg.zPosition = -2 
    ... 
} 
let actionRepeated = SKAction.repeat(mycode,count:3) 

귀하의 경우이 작업을 3 번 반복 할 수 있습니다. 그 후,이 키를 중지해야 할 때마다이 키를 실행하거나 중지 할 수 있습니다. actionRepeated

+0

그래서 moveBGForever = SKAction.repeatForever (SKAction.sequence ([moveBGanimation, shiftBGAnimation]))을 .repeat로 바꾸어야합니까? 그러나 내가 계속 반복 할 필요가 있다면 무엇을 세겠습니까? –

+0

repeatForever 하위 작업에 대해 언급하지 않고 "while cycle"에 대해 이야기합니다. –

+0

주기 동안 당신 대신 myCode = SKAction.run {... code ...}을 할 수 있다는 것을 기억하십시오. 그런 다음 SKAction.repeat를 사용하여이 작업을 반복하십시오 .. –

1

코드를 재구성해야 할 수도 있습니다. 'while'주기를 사용하는 대신 :

while i < 3 { 
... 
} 

.repeat(yourBgActions, count:3)을 사용해야합니다.

+0

카운트가있는 반복 작업에 어떻게 키를 추가 할 수 있습니까? ".repeat (yourBgActions, count : 3)" –

+0

당신은이 SKAction의 인스턴스를 만듭니다 : let repeatAction = SKAction.repeat (yourBgActions, count : 3)'. 그런 다음 repeatAction에 키를 추가 할 수 있습니다. – SimpleBeat

+0

추가됨 : self.run (actionRepeated, withKey : "yourKey"). 충돌시 removeAction (forKey : "yourKey")을 시도했지만 작동하지 않습니다. –