cocos2d iphone - Cocos2d चिपमंक में CCSprite पर कैसे वेग प्रभाव?



cocos2d-iphone velocity (0)

मुझे बुनियादी अवधारणा की आवश्यकता है कि कैसे वेग परिवर्तन काम करता है? अर्थात् जब सीसीएसप्रिस्ट विशिष्ट वेग पर कूदने में सक्षम होता है, जब कुछ वेग सेट होता है?

मैं आपको एक उदाहरण देता हूं जिस पर मैं वर्तमान में काम कर रहा हूं। मैं फ्लैपी पक्षी की तरह एक डेमो तैयार कर रहा हूं, जिसमें मैं अपने पक्षी को ऊर्ध्वाधर पाइप पर उतरने के लिए चाहता था। तो, यह मेरे पागल से पाइप से दूसरे पाइप तक कूदता है, जैसे: मुस्कान :. Gif मैं यहाँ जगह की जाँच करें: https://www.dropbox.com/s/n46vak6qy5wu4x4/jumpyBall_15_jul_152.gif?dl=0

मैं स्प्राइट बिल्डर का उपयोग कर रहा हूं और मैंने इस डेमो को गुरुत्वाकर्षण = (0, -300) के साथ बनाया है। पाइपों के बीच की दूरी 14 9 है इसलिए, जब डेमो शुरू होता है, तो मेरी बर्डी मंच पर पड़ती है और बर्डी और प्लेटफार्म के टकराव पर निम्नलिखित विधि निष्पादित होती है।

ध्यान दें

दूरीओब्स्ट = 14 9

__player = बर्डी

डमीपीस = बहुत पहले पाइप की शुरुआती एक्स स्थिति

नायक = __player

मंच = पाइप

func ccPhysicsCollisionPreSolve(pair: CCPhysicsCollisionPair!, hero: Player!, platform: Obstacle!) -> Bool {
        if (dummyPos < 120) {    // This is to confirm that velocity X is set only once in lifetime.
            __player.physicsBody.velocity.x = 80
        }
        hero.physicsBody.velocity.y = 283

        NSLog("--- Velocity \(hero.physicsBody.velocity.y) and distance \(ccpSub(hero.position, ccp(dummyPos, 0)))")
        dummyPos = hero.position.x

        return true
    }

पहले इस कोड निष्पादन के लिए कंसोल की जांच करें

2015-08-09 02:34:05.042 tsb[15327:94829] cocos2d: surface size: 1136x640
2015-08-09 02:34:05.750 tsb[15327:94829] --- Velocity 283.0 and distance (135.0,153.25)
2015-08-09 02:34:07.617 tsb[15327:94829] --- Velocity 283.0 and distance (149.334320068359,154.448120117188)
2015-08-09 02:34:09.483 tsb[15327:94829] --- Velocity 283.0 and distance (149.333770751953,155.526428222656)
2015-08-09 02:34:11.366 tsb[15327:94829] --- Velocity 283.0 and distance (150.664428710938,151.796905517578)
2015-08-09 02:34:13.233 tsb[15327:94829] --- Velocity 283.0 and distance (149.331237792969,153.140319824219)
2015-08-09 02:34:15.100 tsb[15327:94829] --- Velocity 283.0 and distance (149.331237792969,154.349395751953)
2015-08-09 02:34:16.967 tsb[15327:94829] --- Velocity 283.0 and distance (149.33642578125,155.437561035156)
2015-08-09 02:34:18.850 tsb[15327:94829] --- Velocity 283.0 and distance (150.671020507812,151.716918945312)

ऐसा लगता है कि जब मैं पाली की तरफ उछाल शुरू कर देता हूं तो पाइप के केंद्र से ठीक से बाउंस होता है, लेकिन जब कुछ सेकंड के बाद उछल जाती है तो बर्सी विस्थापित हो जाती है और पाइप के बायीं / दायें किनारे पर आती है और कभी-कभी जमीन पर गिर जाती है: open_mouth:। इस GIF की जांच करें: https://www.dropbox.com/s/v07lfah35iojitz/jumpyBall_15_jul_153.gif?dl=0

मैंने देखा कि एक्स पैरामीटर में दूरी के मानों में बदलाव हैं जो कंसोल में दिखाई दे रहा है। मुझे लगता है कि यह कारण हो सकता है लेकिन यहां पर मूल्य की गणना की जाती है और पता नहीं क्यों यह वही मान नहीं आया है, जैसे, 14 9

यदि आप मेरी अपडेट विधि जांचना चाहते हैं,

override func update(delta: CCTime) {
        __player.position = ccp(__player.position.x /*+ (scrollSpeed * CGFloat(delta))*/, __player.position.y)
        __physicsWorld.position = ccp(firstObstPos - __player.position.x, __physicsWorld.position.y)
}

यहां अपडेट में, मैं '__player' का पालन करता हूं, इसलिए यह स्क्रीन पर बने रह सकता है।

क्या कोई मुझे उचित मार्गदर्शन दे सकता है क्योंकि मुझे जो मूल्य मिले थे, वे स्थिर होते हैं और अगर मैं गति में वृद्धि करना चाहता हूं, तो मैं एक्स वेग बढ़ा सकता हूं या वाई वेग को कम कर सकता है जो पाइपों के बीच की दूरी को भी प्रभावित करेगा।

क्या कोई सूत्र है, जिससे मैं वेग की गणना कर सकता हूं और इसे 14 9 दूरी की यात्रा के लिए बिल्कुल सेट कर सकता हूं?

मैंने बहुत कुछ गल गया और कुछ वेग के समीकरण पाया, लेकिन यह पता लगाने में असमर्थ है कि उन्हें कोकोस 2 डी चिपमंक में कैसे लागू किया जा सकता है। क्या कोई मुझे बता सकता है कि कैसे चिपमैंक ऊंचाई, अवधि और सरल वेग (80, 283) और गुरुत्वाकर्षण (0, -300) से उछाल की दूरी तय करता है?

ये जवाब मेरे लिए काफी मददगार होंगे धन्यवाद दोस्तों।

*********** अपडेट - 16/08/15 *****************

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

let Pi = CGFloat(M_PI)
let degreesToRadians = CGFloat(Pi / 180)
let radiansToDegrees = CGFloat(180 / Pi)

    func d2R(angle: CGFloat) -> CGFloat {
        return angle * degreesToRadians
    }

    func updateSpeed() {
        // t = (2*V*Sin(a))/g -> V = (t*g)/(2*sin(a))
        // h = ((V*V)/2g)*Sin^2(a))
        // D = ((V*V)/g)*sin(2*a)

        let angle = d2R(cAngle)
        velocity_y = (delta_t * gravity)/(2*sin(angle))
        maxJumpHeight = ((velocity_y*velocity_y)/(2*gravity))*(sin(angle)*sin(angle))
        //distanceObst = ((velocity_y*velocity_y)/gravity)*sin(2*angle)

        // Distance in terms of speed rather than velocity
        distanceObst = delta_t*scrollSpeed

        var a = 10      // Debug line
    }

अब पहले से टक्कर हो जाएगा

func ccPhysicsCollisionPreSolve(pair: CCPhysicsCollisionPair!, hero: Player!, platform: Obstacle!) -> Bool {
        let diff = ccpSub(hero.position, ccp(dummyPos, 0))
        let distance = distanceObst + (distanceObst - diff.x)
        NSLog("--- Velocity \(hero.physicsBody.velocity) and \(hero.position) -> \(dummyPos) distance \(diff) and \(distance)")

        if ((dummyPos > firstObstPos) && (diff.x > 0)) {
            // TODO: Adjustment for the bounce point when distance travelled differs
            //velocity_y = velocityForDistance(distance)
            //delta_t = ((delta_t*diff.x)/distance)
            //updateSpeed()
        }
        hero.physicsBody.velocity.y = velocity_y

        dummyPos = hero.position.x

        return false
    }

लेकिन मेरा परिणाम जो उम्मीद करता है उससे मिलान नहीं हो रहा है

दोस्तों कृपया उत्तर दें या ऐसा न करें कि जैसा कि मैं इस से समाप्त हो रहा हूं और कोई भी उचित समाधान खोजने में असमर्थ हूं :(