パンニング後に境界線を設定してカメラを正しく見ることができません。だからここに私のシナリオです。パンニング時にカメラを正しく配置する
私は、画面よりも大きなノードを持っています。私は完全な地図を見るためにユーザーパンをしたいと思っています。ビューが640 by 1136
の場合、私のノードは1000 by 1400
です。マップノード内のスプライトには、デフォルトのアンカーポイントがあります。 次にマップノードにカメラを追加し、位置を(0.5, 0.5)
に設定しました。
ユーザが画面をパンするとき、私はカメラの位置やマップノードを変更する必要がある場合は今、私は思ったんだけど?最初のアプローチは、位置が(0.5、0.5)と定義され、変換値がそれよりも大きいので、単にカメラの位置に翻訳を追加することができないため、問題があるようです。だから私はそれを倍増/画面サイズで分割しようとしましたが、それは動作していないようです。 2番目のアプローチはより良いですか?
var map = Map(size: CGSize(width: 1000, height: 1400))
override func didMove(to view: SKView) {
(...)
let pan = UIPanGestureRecognizer(target: self, action: #selector(panned(sender:)))
view.addGestureRecognizer(pan)
self.anchorPoint = CGPoint.zero
self.cam = SKCameraNode()
self.cam.name = "camera"
self.camera = cam
self.addChild(map)
self.map.addChild(self.cam!)
cam.position = CGPoint(x: 0.5, y: 0.5)
}
var previousTranslateX:CGFloat = 0.0
func panned (sender:UIPanGestureRecognizer) {
let currentTranslateX = sender.translation(in: view!).x
//calculate translation since last measurement
let translateX = currentTranslateX - previousTranslateX
let xMargin = (map.nodeSize.width - self.frame.width)/2
var newCamPosition = CGPoint(x: cam.position.x, y: cam.position.y)
let newPositionX = cam.position.x*self.frame.width + translateX
// since the camera x is 320, our limits are 140 and 460 ?
if newPositionX > self.frame.width/2 - xMargin && newPositionX < self.frame.width - xMargin {
newCamPosition.x = newPositionX/self.frame.width
}
centerCameraOnPoint(point: newCamPosition)
//(re-)set previous measurement
if sender.state == .ended {
previousTranslateX = 0
} else {
previousTranslateX = currentTranslateX
}
}
func centerCameraOnPoint(point: CGPoint) {
if cam != nil {
cam.position = point
}
}
カメラの(0.5、0.5)位置はどこから取得していますか? – Confused
待っています。私はあなたが何をしたかを見ていると思います...あなたはXcodeからデフォルトのテンプレートを使い始めましたか?シーンのアンカーポイントを変更していない? – Confused
anchorPoint(そのように定義することができます)とカメラの位置をミックスしました。この場合、中心から0.5ピクセルです。 'didLoad'にシーンのanchorPointを0.0に設定しました。そうでなければそれらに触れていない。 – owca