2017-09-22 42 views
1

當時我使用SKConstraint.positionX(rangex, y: rangey)將我的SKCameraNode限制在我創建的遊戲板中。這很好,因爲當你碰到邊界時就沒有口吃。但是我目前的方法來限制相機的比例,因爲它在經過並回擊時撞到了邊界。Swift:SKConstraint用於縮放嗎? (或相當於)口吃

@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這不是丟失幀率,它發生是因爲我可以縮小邊界,然後重新設置,所以每次調用函數都會因爲pinchgesture可以越過邊界,所以會在下一次重置它。 – Skidushe

+0

@流利性我唯一想到的就是它不在繪製循環中,只有當函數被調用時,所以如果我把它放在繪製循環中,它可能工作,但我沒有時間去測試。 – Skidushe

回答

0

沒有直接的SKConstraint相當於規模,但是你遇到口吃的原因是當你越過界限時,它會在下次調用函數時對齊,而不是在渲染幀之前,所以理論上你可以瞬間大幅放大,並保持在那裏直到你再次激活縮放功能。

創建等價物的一種方法是將代碼檢查在渲染循環中比例是否大於x,如here所示。 RenderLoop Diagram

所以,如果你檢查的最後一刻:

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