2017-11-04 19 views
0

(화면을 터치하여) 생성하는 모든 노드에 대해 타이머를 설정하려고합니다. remove (removefromparent를 사용하여) 노드를 제거 할시기를 알기 위해 타이머를 설정하려고합니다. 나는 어떤 노드가 어떤 위치에서 5 초 동안 위치한다면 그것이 화면에서 제거되기를 원한다. 인스턴트 메신저에 대한 새로운 인스턴트 및 어떻게 정말 타이머를 설정해야 얻을지 않습니다. 나는이 초기화 사용 : 나는 "withTimeInterval는"두 번째를 설정하는 것을 알 수노드의 타이머 설정

let ballTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false, block: <#T##(Timer) -> Void#>) 

을 - 그래서 나는 1로 "반복"내가 정말 얻을 그래서하지 않는다 "블록"속성을 설정할 메신저가 올바른 기능을 사용하는지 확실하지 않습니다.

아무도 도와 줄 수 있습니까?

답변

0

당신은 장면의 update() 기능을 사용해야합니다. 이 오버라이드는 모든 프레임에서 실행되므로 위치를 확인하고 각 노드를 추적하면 완료시 노드를 제거하는 wait() 작업을 시작하거나 다시 시작할 수 있습니다.

뭔가 같은

if ball.position.x == 200 && ball.position.y == 200 { 
    let wait = SKAction.wait(forDuration: 5.0) 
    let remove = SKAction.removeFromParent() 
    let sequence = SKAction.sequence([wait, remove]) 

    ball.run(sequence) 
}else{ 
    ball.removeAllActions() 
} 

참고 : 최소한 몇 점의 범위를 사용하거나 x와 y 값을 반올림하지만 같은 특정 좌표를 사용하지 말아야합니다.

+0

tnx! 범위를 어떻게 사용합니까? – omerc

+0

'if ball.position.x> = 199 && ball.position.x <= 201 {' – TheValyreanGroup

1

Spritekit을 사용하는 경우 타이머를 사용할 필요가 없습니다. Spritekit은 이벤트를 트리거하는 지정된 시간에 작업을 실행하는 방법뿐만 아니라 Update 루프를 호출하는 타이밍 메커니즘에 내장되어 있습니다.

let ball = SKSpriteNode(color: red, size: CGSize: CGSize(width: 100, height: 100)) 
ball.zPosition = 1 
ball.position = CGPoint(x: 100, y: 100) 
addChild(ball) 

let wait = SKAction.wait(forDuration: 5.0) 
let remove = SKAction.removeFromParent() 
let sequence = SKAction.sequence([wait, remove]) 

ball.run(sequence) 
+0

내가 실제로 찾고있는 게 아니라면, 그 위치가 어떤 지점에 있고 5 초 동안 거기에 있다면 노드 (공)를 제거하고 싶습니다. – omerc

+0

당신은 당신의 포스트에서 그 말을하지 않았는데, 당신의 질문을 더 잘 반영하도록 그것을 수정하는 것이 좋습니다. –

+0

고마워요, 고마워요! 그걸 도와 주실 수 있나요? – omerc

0

헬퍼에게 감사드립니다! 내가 결국 한 것은 이것이다 : 첫째

override func update(_ currentTime: TimeInterval) { 
    self.enumerateChildNodes(withName: "BALL") { (node:SKNode, nil) in 
     if node.position.y <= 25 || node.position.x <= 50 { 
      let wait = SKAction.wait(forDuration: 3.0) 
      let remove = SKAction.removeFromParent() 
      let sequence = SKAction.sequence([wait, remove]) 
      print("in range") 
      node.run(sequence) 
     } 
    } 
} 

, 그때 나는 그 이름 (BALL)로 노드를 검색 한 다음 내가보기에서 제거 heValyreanGroup 응답을 사용하여 업데이트 기능을 통해 실행합니다.

+0

이것은 코드를 처리하는 참담한 방법입니다. 당신이하는 일은 당신의 씬 루트에서 공이라고 불리는 부분을 검색하고 매 프레임마다 처리하는 것입니다. 이것은 큰 시간 낭비입니다. 나는 당신이 찾은 것을 보존 할 것을 권한다. 그래서 당신은 매번 검색 할 필요가 없다. 이것을 좀 더 명확하게하기 위해서. 백과 사전 B가 있고 볼에 관한 서적 보고서를 쓰고 있다고 가정 해 봅시다. 이제 "볼"을 필요로 할 때마다 검색해야한다고 상상해보십시오. 시간이 많이 걸릴 것입니다. Ball에 북마크를 추가하면 다음 번에 필요할 때 빠르게 액세스 할 수 있습니다. – Knight0fDragon

+0

좋아, 나는 그것에 대한 피드백과 의견을 얻을 수 있도록 내 대답을 게시합니다. 첫째, 감사합니다! 둘째, 더 좋은 방법이 있습니까? 사용법을 보여 줄 수 있습니까? – omerc