2016-03-02 9 views
7

के लिए वेग सेट करें मैं स्विफ्ट पर एक चलती प्लेटफॉर्म बनाने की कोशिश कर रहा हूं और प्लेयर को मंच के साथ एक साथ स्थानांतरित करने के लिए, मुझे self.moveByX() को बदलने की आवश्यकता है, जो physicsBody?.velocity पर बहुत आसान था, और मंच और खिलाड़ी दोनों के लिए कुछ घर्षण जोड़ें)।स्विफ्ट: दूरी

तो, मैं इस तरह एक समारोह बना दिया:

self.runAction(
    SKAction.repeatActionForever(
     SKAction.sequence([ 
      SKAction.runBlock({ 
       print(self.position.x) 
       self.physicsBody?.velocity = CGVectorMake(20, 0.0) 
      }), 
      SKAction.waitForDuration(3), 
      SKAction.runBlock({ 
       print(self.position.x) 
       self.physicsBody?.velocity = CGVectorMake(-20, 0.0) 
      }), 
      SKAction.waitForDuration(3) 
     ]) 
    ) 
) 

समस्या यह है कि मैं पदों के बीच का अंतर वास्तव में 60 (20 * 3s) होने की उम्मीद है, लेकिन मैं मंच के लॉग प्राप्त कर रहा हूँ x स्थिति इस तरह:

596.042907714844 
544.228393554688 
596.048950195312 
544.234008789062 
596.054565429688 
544.116333007812 
595.936584472656 
544.121887207031 
595.942199707031 
544.127685546875 
595.824584960938 
544.009704589844 

तो, पदों के बीच का अंतर कुछ

~ 51 के बीच 52 कैसे मैं एक कल्पना में मंच चलता है वेग बदलकर ific और सटीक दूरी?

संपादित करें: अगर यह प्रासंगिक है मैं नहीं जानता, लेकिन मैं इस तरह मंच के भौतिक विज्ञान शरीर निर्धारित किया है:

self.physicsBody = SKPhysicsBody(rectangleOfSize: self.size) 
self.physicsBody?.categoryBitMask = PhysicsCategory.Ground 
self.physicsBody?.contactTestBitMask = PhysicsCategory.Player 
self.physicsBody?.collisionBitMask = PhysicsCategory.Player 
self.physicsBody?.allowsRotation = false 
self.physicsBody?.affectedByGravity = false 
self.physicsBody?.dynamic = true 
self.physicsBody?.friction = 1.0 
self.physicsBody?.restitution = 0.0 
self.physicsBody?.mass = 99999999999 
+0

मैंने थोड़ी देर के लिए स्प्राइट किट के साथ काम नहीं किया है। लेकिन मुझे लगता है कि आप बार-बार वेग को दोहरा रहे हैं। अपने "SKAction.runBlock" में "self.physicsBody? .velocity" को लागू करने से पहले अपनी वेग को शून्य पर रीसेट करने का प्रयास करें। फिर यह सिर्फ एक अनुमान है, मैं अब spritekit के साथ काम नहीं करता। लेकिन घर्षण/वेग हानि दोनों वस्तुओं के लिए समान नहीं हो सकती है। गति को रीसेट करने से यह ठीक हो सकता है। शुभकामनाएं मेट। –

+0

हाँ, मैंने यह भी कोशिश की है, समस्या –

+0

को बदलने के लिए ठीक नहीं है, क्या आपने दोनों ऑब्जेक्ट्स को समान आकार/द्रव्यमान बनाने की कोशिश की है? जब आप ऐसा करते हैं, तो क्या समस्या गायब हो जाती है? –

उत्तर

2

मैंने पहले स्प्राइट किट के साथ काम नहीं किया है, लेकिन मुझे लगता है कि तुम्हारी समस्या क्या है कि एक SKHhysicsBody की रैखिक डंपिंग संपत्ति डिफ़ॉल्ट रूप से 0.1 पर सेट की जाती है, एक त्वरित गणना (20 * 3-20 * 3 * 0.1 = 54) के साथ यह सही लगता है अगर वेग हर फ्रेम को डंप कर रहा है।

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/index.html#//apple_ref/occ/instp/SKPhysicsBody/linearDamping

संपादित करें::

यहाँ संपत्ति के लिए दस्तावेज़ है मैंने सोचा था कि मैं अपने जवाब की जांच होनी चाहिए कम से कम तो मैं एक त्वरित (किसी न किसी तरह) कार्यक्रम ने लिखा है:

var dampingOccurancesPerSecond = 60.0 //Corresponds to frame rate 
var numberOfSeconds = 3.0 
var time = 0.0 

@IBAction func test(sender: UIButton) { 
    let result = checkDistanceForVelocity(20, damping: 0.1, distanceTraveled: 0.0) 
    print(result) 
} 

func checkDistanceForVelocity(velocity: Double, damping: Double, distanceTraveled: Double) -> Double { 

    if time < numberOfSeconds { 

     time += 1/dampingOccurancesPerSecond 

     let newVelocity = velocity - (velocity * damping/dampingOccurancesPerSecond) 

     let newDistance = (distanceTraveled + velocity/dampingOccurancesPerSecond) 

     return checkDistanceForVelocity(newVelocity, damping: damping, distanceTraveled: newDistance) 

    } 

    return distanceTraveled 

} 

आपकी यात्रा दूरी पर छोटे बदलावों की संभावना भी आपकी फ्रेम दर में छोटे बदलावों की वजह से है। जब dampingOccurancesPerSecond 60 से बदलता है -> 50 कुल दूरी 52.1203109538336 से बदलती है -> 51.8808576268828

आशा है कि इससे मदद मिले !!

+0

क्या मैं सिर्फ प्लेटफ़ॉर्म के भौतिकी निकाय से रैखिक धुंध को हटा सकता हूं? –

+0

हाँ बिल्कुल, भौतिकी शरीर की रैखिक डंपिंग गुण को 0.0 में बदलें: –

+0

self.physicsBody? .linearDamping = 0.0 –

संबंधित मुद्दे