2017-09-22 6 views
1

분 내가 만든 게임 보드 내에서 SKConstraint.positionX(rangex, y: rangey)을 사용하여 내 SKCameraNode를 제한하고 있습니다. 너가 경계를 명중 할 때 떠듬적 거리기가 없기 때문에 이것은 좋다. 그러나 카메라의 눈금을 채우는 현재의 방식은 지나치다가 뒤로 물러나는 경계에 부딪히면서 말더듬을 만듭니다. 스위프트 : 규모에 대한 SK 제약 조건? (또는 이에 상응하는 것) 말더듬이

@objc func zoomedView(_ sender:UIPinchGestureRecognizer) { 
     if newCamera.xScale > 0.148{ 
      let pinch = SKAction.scale(by: 1/sender.scale, duration: 0.0) 
      newCamera.run(pinch) 
      sender.scale = 1.0 
     } else {newCamera.setScale(0.148)} 
    } 

규모 (또는 동급)에 대한 SKConstraint이 더듬을 중지 할 수있는 더 좋은 방법이 있나요? 감사합니다 :)

+0

좌절 소리 ... 당신의 프레임 속도는 실제로 드롭합니까? 그리고 시뮬레이터 나 장치에 있습니까? – Fluidity

+0

@Fluidity 프레임 률이 떨어지는 것은 아닙니다. 경계를 넘어서 확대 할 수 있기 때문에 상황이 바뀌고 다시 설정되기 때문에 핀치 체가 한계를 넘어 서기 때문에 함수가 호출 될 때마다 다음 번에 재설정됩니다. – Skidushe

+0

@Fluidity 내가 생각한 유일한 것은 드로 루프에 있지 않다는 것입니다. 함수가 호출 될 때만 사용됩니다. 따라서 드로 루프에 넣으면 작동하지만 시간이 없었습니다 테스트 할. – Skidushe

답변

0

스케일에 대한 직접적인 SKConstraint는 없지만, 당신이 말더듬을 겪고있는 이유는 다음 번에 함수가 호출 될 때 프레임이 렌더링되기 전에 스냅 할 때의 경계를 넘어갈 때입니다. 그래서 이론적으로 당신은 순간적으로 크게 확대 할 수 있고 줌 기능을 다시 활성화 할 때까지 거기에 머물러있게됩니다.

등가를 만드는 방법은 윤곽선이 here 인 것처럼 렌더링 루프에서 배율이 x보다 큰지 확인하는 코드를 넣는 것입니다. RenderLoop Diagram

마지막 가능한 순간에 확인했다 그래서 경우 :

override func didFinishUpdate() { 
    if newCamera.xScale < 0.148{ 
     newCamera.setScale(0.148) 
    } else if newCamera.xScale > 10{ 
     newCamera.setScale(10) 
    } 
}