/ / SpriteKit एक्सेलेरोमीटर हमेशा सटीक या शायद संवेदनशील से अधिक नहीं - स्विफ्ट, स्प्राइट-किट, स्विफ्ट 3

स्प्राइटकिट एक्सेलेरोमीटर हमेशा सटीक या शायद संवेदनशील - स्विफ्ट, स्प्राइट-किट, स्विफ्ट 3 से अधिक नहीं होता है

मैं निम्नलिखित कोड का उपयोग करके अपने गेम में गति को लागू कर रहा हूं:

अगर गतिमान ।.AAelelerometerAvailable == सच {

    motionManager.startAccelerometerUpdates(to: OperationQueue.current!, withHandler: {

data, error in

let currentX = self.player.position.x

self.destX = currentX + CGFloat((data?.acceleration.x)! * 200)

})

}

फिर अपडेट में (_ currentTime: CFTimeInterval) फ़ंक्शन:

let action = SKAction.moveTo(x: destX, duration: 0.2)

self.player.run(action)

समस्या यह है कि यह वास्तव में संवेदनशील और लगता हैस्प्राइट कभी-कभी अपने झुकाव के विपरीत तरीके से जाएगा और बस सभी जगह महसूस होगा, मुझे लगता है कि इसे डिवाइस के झुकाव के साथ करना है, मैं बस साइड-साइड गति का पता लगाना चाहता हूं। क्या मैं कुछ भूल रहा हूँ?

उत्तर:

जवाब के लिए 0 № 1

मैं सीधे आपके मोशन डेटा को लाने की कोशिश करूंगाआपके दृश्य की अपडेट विधि, इसलिए इसका अद्यतन 60 बार एक सेकंड है। हैंडलर का उपयोग करके मुझे कभी भी अच्छे परिणाम नहीं मिले, यह हमेशा सुस्त रहता है, भले ही आप अंतराल को बहुत कम सेट करें।

override func update(_ currentTime: TimeInterval) {
if let data = motionManager.accelerometerData {
let currentX = player.position.x
destX = currentX + CGFloat((data.acceleration.x) * 200)
...
}
}

पाने के लिए आपको 200 को समायोजित करना पड़ सकता हैवांछित परिणाम। मैं SKAction की अवधि भी कम कर दूंगा, 0.2 बहुत लंबा है। वैकल्पिक रूप से एक SKAction का उपयोग किए बिना सीधे अपने स्प्राइट की स्थिति को अपडेट करने का प्रयास करें।

उम्मीद है की यह मदद करेगा


जवाब के लिए 0 № 2

मुझे लगता है कि आप "ट्यूटोरियल के दूसरे भाग को याद कर रहे हैं" शायद आपको यह कोड यहाँ से मिल रहा है: https://www.ioscreator.com/tutorials/move-sprites-accelerometer-spritekit-swift इसमें वह नकारात्मक डेटा को अजीब तरीके से संभालने की आवश्यकता महसूस करता है:

        let currentX = self.player.position.x

if data.acceleration.x < 0 {
self.destX = currentX + CGFloat(data.acceleration.x * 100)
}

else if data.acceleration.x > 0 {
self.destX = currentX + CGFloat(data.acceleration.x * 100)
}

और यह क्यों एक मुद्दा हो सकता है, और पूरे "ट्यूटोरियल" एक काल्पनिक सपना है, वह यह है कि वह अपडेट () में बिजली आंदोलन के लिए SKActions के निर्माण का उपयोग कर रहा है।

यह बिल्कुल सही नहीं लगता है।

मोशन डेटा के साथ चीजों को स्थानांतरित करने के दो अन्य अच्छे तरीके हैं:

  1. उन बलों को लागू करें जो डिवाइस के कोण को वस्तु पर दर्शाते हैं
  2. उपकरण कोण पर आधारित वस्तु को प्रभावित करने वाले गुरुत्वाकर्षण की दिशा और शक्ति को बदलें

मैं "मोशन इनफॉर्मेशन का जवाब देने की एक्शन तकनीक से दोनों को बहुत बेहतर मानता हूं, लेकिन मैं इस बारे में गलत हो सकता हूं।