2017-01-11 10 views
2

InteractiveCameraNode이라는 간단한 하위 클래스 SKCameraNode이 있습니다. 지금은 매우 간단합니다 : 카메라의 위치가 바뀌면 상황이 발생해야합니다. 여기에 내가 무슨 짓을 :SKCameraNode.position SKCction을 사용하여 이동할 때 setSet이 실행되지 않습니다.

class InteractiveCameraNode: SKCameraNode { 
    // MARK: - Properties 
    var enableInteraction = true 
    var positionResponders = [(CGPoint, CGPoint) -> Void]() 


    /// Calls every closure in the `positionResponders` array 
    override var position: CGPoint { 
     didSet { 
     if enableInteraction { 
      for responder in positionResponders { 
       responder(oldValue, position) 
      } 
     } 
     } 
    } 
} 

카메라 이동, 나는 카메라의 위치가 변경 될 때 호출되는 폐쇄의 배열이 때 일어나는 여러 가지가있을 수 있기 때문에. 지금까지는 액션을 사용하여 카메라를 움직이면 didSet 관찰자가 호출되지 않는 것을 제외하고는 모든 것이 완벽하게 작동합니다. 카메라를 구속 조건으로 사용하여 노드를 추적 한 다음 해당 노드를 동작으로 이동하면 작동합니다. 카메라를 손으로 움직이면 작동합니다. 왜 행동으로는 효과가 없을까요? 나뿐만 아니라 뭔가 유용한 오늘 :

그것은 그 행동처럼 보이는 배운 ..

답변

1

내 이전의 대답은 무엇이든 그 대답에 저를 이끌어 .. 내 부분에 다른 실수로 잘못된 100 %였다 나는 사과 A) 벌레 또는 B) 내가 이해하지 못하는 Swift/SK의 더 깊은 메커니즘. 실제 위치가 작용 didSet에서 갱신되었음을 보여주는

// In didmovetoview: 
let node = Noder(color: .black, size: CGSize(width: 25, height: 25)) 
node.initialize(scene: self) 

출력 :

class Noder: SKSpriteNode { 

    var myPosition: CGPoint = CGPoint.zero { didSet { print(position) } } 

    func initialize(scene: SKScene) { 
    isUserInteractionEnabled = true 
    scene.addChild(self) 
    } 

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
    position = touches.first!.location(in: self.scene!) 
    } 

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
    print(self.position) 
    run(.moveBy(x: -35, y: 0, duration: 0.5), completion: { 
     self.myPosition = self.position 
    }) 
    } 
} 

사용 : 여기

놀이터 날 근무 해결책이다

(50.0, -118.0)
(14.9999971389771, -11 8.0)


그러나 이것은 아마도 당신이 원하는 것을 너무 느린 것입니다, 그래서 당신은 수동으로 position 또는 update()에서 myPosition 하나 didSet 롤을 위해 작동 중 모든 프레임을 (설정 더 나을 것입니다 ..)

(이 단락의 경우 혼동을 가할 수 있음).


또한, 나는 KVO 여기서 일하면 것인지 ... 내가 그들을 사용하지 않은 궁금해하지만 CameraNode은 이미이 가능성이 어떤 종류의 버그 어쩌면 이후에 볼 수있는 NSObject의 ... 무언가이다. ..

+0

KVO는 무엇인가요? – BadgerBadger

+1

@BadgerBadger https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html#//apple_ref/doc/uid/10000177-BCICJDHA – Fluidity

+0

일반적으로 전체 참석자/kvo/메신저/신호 패턴 (나는 수동으로 일을하는 것을 좋아한다. 맨 아래).하지만이 경우에는 정확히 당신이하려는 것과 같은 소리이기 때문에이 옵션을 탐색 할 것이다. @BadgerBadger – Fluidity