पर पैनिंग करते समय कैमरे को सही स्थिति में रखें। मुझे पैनिंग के बाद मेरे दृश्य के अंदर सीमाओं और स्थिति को सही ढंग से सेट करने में कठिनाई हो रही है। तो यहाँ मेरा परिदृश्य है।पैनिंग के बाद
मेरे पास एक नोड है जो स्क्रीन से बड़ा है और मैं उपयोगकर्ता को पूरा नक्शा देखने के लिए चारों ओर घूमना चाहता हूं। मेरा नोड 1000 by 1400
है जब दृश्य 640 by 1136
है। नक्शा नोड के अंदर स्प्राइट्स डिफ़ॉल्ट एंकर पॉइंट होता है। फिर मैंने मानचित्र नोड में एक कैमरा जोड़ा है और इसकी स्थिति (0.5, 0.5)
पर सेट की है।
अब मैं अगर मैं कैमरे के स्थिति या नक्शा नोड उपयोगकर्ता स्क्रीन धूपदान जब बदलते जाना चाहिए सोच रहा हूँ? पहला दृष्टिकोण समस्याग्रस्त प्रतीत होता है, क्योंकि मैं केवल कैमरे की स्थिति में अनुवाद जोड़ नहीं सकता क्योंकि स्थिति को (0.5, 0.5) के रूप में परिभाषित किया जाता है और अनुवाद मान उस से बड़े होते हैं। तो मैंने स्क्रीन आकार से इसे गुणा/विभाजित करने की कोशिश की लेकिन यह काम नहीं लग रहा है। क्या दूसरा दृष्टिकोण बेहतर है?
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
प्रतीक्षा करें .. मुझे लगता है कि मैंने देखा है कि आपने क्या किया है ... क्या आपने एक्सकोड से डिफ़ॉल्ट टेम्पलेट के साथ शुरुआत की है? और दृश्य के एंकर पॉइंट्स को नहीं बदला? – Confused
मैंने कैमरे की स्थिति के साथ एंकरपॉइंट (जिसे आप परिभाषित कर सकते हैं) को मिश्रित किया। इस मामले में यह केंद्र से 0.5 पिक्सेल है। मैंने दृश्य के एंकरपॉइंट को 0.0 को 'डीडलोड' में सेट किया है। अन्यथा उन्हें छुआ नहीं है। – owca