2016-08-19 17 views
13

में एफपीएस बूंदें मैं स्विफ्ट & स्प्राइटकिट के साथ एक साधारण गेम विकसित कर रहा हूं, और मैंने देखा है कि एफपीएस 60 से 58-59 (और पीछे) से गिरता है। वहाँ एक ध्यान देने योग्य अंतराल जब ड्रॉप होता है - ऐसा लगता है कि 1 या 2 तख्ते गिरा दिया जाता है।स्प्राइटकिट

सीपीयू लोड लगभग 20-25% है और बहुत कुछ नहीं बदलता है, स्मृति उपयोग स्थायी रूप से लगभग 8 एमबी है।

स्क्रीनशॉट: App Screenshot

वहाँ स्क्रीन पर 6 वस्तु हैं: लेबल, लाल वस्तु (स्प्राइट), 2x हरी वस्तुओं (स्प्राइट), एक बॉक्स (स्प्राइट) और "जमीन" (रेक्ट आकार नोड)।

लेबल को छोड़कर सभी वस्तुओं भौतिकी शरीर (सफेद सीमाओं के साथ दिखाया गया है) है।

ग्रीन और सफेद वस्तुओं डायनामिक रूप से तैयार कर रहे हैं, दाईं से बाईं ओर ले जाएँ और नष्ट कर दिया जब गुप्त:

func scheduleAddingLiquid() { 
let wait = SKAction.waitForDuration(NSTimeInterval(getRandomNumber(1, end: 3))) 
     let block = SKAction.runBlock({ 
      [unowned self] in 

      let liquidNode = LiquidNode(texture: self.liquidTexture, sceneFrame: self.frame) 
      self.addChild(liquidNode) 
      liquidNode.move() 

      self.scheduleAddingLiquid() 
     }) 

     let sequence = SKAction.sequence([wait, block]) 
     runAction(sequence) 

और:

func move() { 
     let moveAction = SKAction.moveToX(-frame.width, duration: NSTimeInterval(3)) 
     let removeBlock = SKAction.runBlock({ 
      [unowned self] in 

      self.removeFromParent() 
      }) 

     runAction(SKAction.sequence([moveAction, removeBlock])) 
    } 

लाल वस्तु "कूदता" स्क्रीन छूने पर:

if touches.count > 0 && isHeroOnGround && heroNode != nil { 
      isHeroOnGround = false 
      heroNode.physicsBody?.velocity = CGVector(dx: 0, dy: 0) 
      heroNode.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 400)) 
     } 

अंतराल "कूदने" के बाद यादृच्छिक समय अंतराल के भीतर होता है (लगभग 0.5 से 1.5 सेकंड तक) कूदने के बाद)।

अंतराल जब टकराव होता है नहीं होता है, जब लाल वस्तु है "हवा में"। और यह हर कूद नहीं होता है। एफपीएस ड्रॉप होने पर सीपीयू लोड बढ़ता नहीं है।

आईओएस 9.3 पर परीक्षण किया गया, iPad मिनी 2.

Upd 1. आईओएस 9.3 iPhone 6 पर परीक्षण किया - एफपीएस के बारे में 50-55 पहले कुछ सेकंड के लिए है, तो यह लगातार 60 है अंतराल के बिना। इसलिए, यह iPad मिनी 2 पर lags केवल (मैं अन्य लोगों पर परीक्षण नहीं कर सकते केवल इन दो उपकरणों है,)।

यूपीडी 2. मैंने लाल आकृति को छोड़कर सभी ऑब्जेक्ट्स सृजन कोड पर टिप्पणी की है। जब भी "कूदते हैं" यह अभी भी कमजोर है। तो, अब मुझे यकीन है कि यह applyImpulse विधि से संबंधित है हूँ।

यूपीडी 3. वास्तव में, वास्तव में अजीब है: मैंने स्पर्श से सभी कोड हटा दिए हैं, और यह अभी भी छूने पर है! विधि पूरी तरह से खाली है। मुझे नहीं पता क्यों, लेकिन अगर मैं कई बार क्लिक करता हूं तो एफपीएस ड्रॉप हो जाता है ...

इसे कैसे डिबग करें?

+0

मुझे संदेह है कि आपकी समस्या स्कैक्सा और भौतिकी इंजन को कैसे मिलाएं इस तरह से है। मैंने आपके कोड निष्पादन में सभी को नहीं देखा है मैंने देखा है कि आप चाल का उपयोग कर आवेग लागू कर रहे हैं। उन दोनों अच्छी तरह से एक साथ प्लेट नहीं है। तो जांचें कि क्या वे दो हस्तक्षेप नहीं कर रहे हैं ... यह एक शुरुआत होगी। – Whirlwind

+0

अधिक सटीक, SKActions * को ऑब्जेक्ट्स को स्थानांतरित करने के लिए उपयोग नहीं किया जाना चाहिए यदि आप पहले से ही भौतिकी इंजन का उपयोग करके उन वस्तुओं को स्थानांतरित करते हैं। यदि आप केवल संपर्कों में रूचि रखते हैं तो भौतिकी इंजन के साथ कार्यों का उपयोग करना ठीक है। – Whirlwind

+2

1 से 2 एफपीएस में एक बूंद आपकी आंखों से ध्यान देने योग्य नहीं होगी, इसलिए आप जो अंतराल कह रहे हैं, वह अंतराल नहीं हो सकता है, यह मुख्य धागे पर रोक सकता है, या यह दोषपूर्ण प्रोग्रामिंग के कारण एक अवांछित प्रभाव हो सकता है। वास्तव में जो हो रहा है, उसके बारे में अधिक जानकारी आपके मामले में सहायक हो सकती है, या शायद आप इसे http://codereview.stackexchange.com/ पर ले जाना चाहेंगे और लोगों को यह देखने दें कि आप अपने कोड के साथ कहां गलत हैं। – Knight0fDragon

उत्तर

4

इसमें केवल मिनी पर समस्याएं हैं, मुझे लगता है कि आपके मिनी (या आपके मिनी पर उस विशेष पैकेज) में कुछ गड़बड़ है। एक नई परियोजना बनाने का प्रयास करें, फ़ाइलों को कॉपी करें, फिर इसे फिर से चलाएं। इसके अलावा, आप 9.3 कहा, लेकिन वहाँ 9.3.1, 9.3.2, आदि दो उपकरणों है अलग था सकता है बनाता है।

तो, सबसे पहले, सुनिश्चित करें कि आपका आईफोन और आईपैड आईओएस का एक ही संस्करण चला रहा है .. शायद वहां एक बग था, या शायद उन्होंने एक बग लगाया (इस प्रकार एक को काम करने के लिए और दूसरा नहीं)।

इसके अलावा, इसे विभिन्न अनुकरणकर्ताओं पर चलाने का प्रयास करें ... यदि यह अनुकरणकर्ताओं पर निर्दोष रूप से चलता है, तो मैं मिनी (इसके वर्तमान कॉन्फ़िगरेशन में) के बारे में भी अधिक संदेह करता हूं।

इस तरह, आप यह भी देख सकते हैं कि (शायद) समस्या को अभिविन्यास (आईफोन बनाम 4: 3 या आईपैड के वाइडस्क्रीन) के साथ क्या करना है।

कभी-कभी, मेरे प्रोजेक्ट फ़ाइलों (प्लगइन के बिना भी) के साथ "बहुत अजीब" चीजें होती हैं और बस एक नई प्रोजेक्ट तैयार करती हैं, जो सभी फ़ाइलों को निश्चित रूप से कॉपी करती है। यदि आप रिक्त "स्पर्श बेगन" पर क्लिक करते हैं तो यह लगी हुई है ... मुझे लगता है कि एक्सकोड/आपकी मिनी के साथ कुछ छोटी गाड़ी हाथ में है - क्योंकि यह केवल उस डिवाइस पर होती है (इस प्रकार हम अब तक जानते हैं) ...

अन्य बातों पर विचार करने के लिए,

  1. Xcode का कौन सा संस्करण उपयोग कर रहे हैं? नवीनतम बीटा आज़माएं/7.3 पर वापस जाएं। कोई अंतर?

  2. क्या आपके पास एक और कंप्यूटर है जिससे आप इस परियोजना को बनाने का प्रयास कर सकते हैं?

  3. यदि [unowned self] को बाहर निकालना या इसे छोड़ना कुछ भी ठीक नहीं हुआ है, तो मेरा सुझाव print कथन के साथ अपना कोड लोड करना होगा और देखें कि क्या हो रहा है।

  4. यदि आपने स्प्राइट नोड्स बनाने के लिए दृश्य संपादक का उपयोग किया है, तो उन्हें हटाएं और उन्हें रीमेक करें, या प्रोग्रामेटिक रूप से बनाने का प्रयास करें। इसने मेरी कुछ परियोजनाओं में यादृच्छिक बग तय की है (प्रतीत होता है कि कोई कारण नहीं है)।

हमें अधिक कोड/जानकारी चाहिए, लेकिन ऊपर की उम्मीद आपकी समस्या को ठीक से ठीक करनी चाहिए।

+0

उत्तर के लिए धन्यवाद!मेरे पास केवल 2 डिवाइस हैं, आईपैड मिनी 2 और आईफोन 6, दोनों के पास एक ही संस्करण है (9.3.5)। मैंने सिमुलेटर पर गेम चलाने की कोशिश की है, यह 5s/6 पर ठीक है, लेकिन 6 +/6s पर लगी है (मुझे लगता है कि यह स्क्रीन आकार की वजह से है)। 1. एक्सकोड नवीनतम स्थिर रिलीज है, मैं बीटा कोशिश करूंगा। 2. मेरे पास केवल एक एमबीपी (नवीनतम स्थिर ओएस एक्स) है। 3. पहले से ही कोशिश की, कुछ भी नहीं बदला। 4. नहीं, मैंने इसका उपयोग नहीं किया। सबसे अजीब चीज यह है कि यह केवल छूने पर लगी है, भले ही स्पर्श को संभालने के लिए कोई कोड न हो। – arts777

+0

@RankoR दिलचस्प। यह हार्डवेयर फोन पर अंतराल नहीं है, लेकिन वर्चुअल पर करता है। क्या आपका मैकबुक कोर i या core2duo है? मैं निश्चित रूप से नए परियोजना आयात, बीटा एक्सकोड का प्रयास करेंगे। यदि यह काम नहीं करता है तो आपको परियोजना को जीएच पर रखना चाहिए ताकि हम एक नज़र डालें। मेरे पास 4.529z क्वाड कोर हैकिंटोश है जो r295x2 के साथ है .. xD अगर यह उस पर लगी है, तो यह कोड होना चाहिए। मेरे पास आईपैड 3, वायु और नियमित आईफोन 5 भी है .... – Fluidity

+0

भी, मैं अलग-अलग कॉन्फ़िगरेशन की स्प्रेडशीट बनाना शुरू कर दूंगा जिसमें यह अंतराल/अंतराल नहीं होता है। यह उपयोगी हो सकता है या नहीं भी हो सकता है, लेकिन यह विचार करने के लिए कुछ हो सकता है कि भविष्य की परियोजनाओं में समान बग होने लगते हैं या नहीं। यदि एक्सकोड या आईओएस में कोई वास्तविक बग है, तो वह डेटा ऐप्पल को भी ठीक करने में मदद करेगा। – Fluidity

1

मुझे लगता है कि यह थोड़ा देर हो चुकी है, लेकिन जब मैं कुछ दृश्य SKShapeNode जोड़ता हूं तो मेरे पास प्रदर्शन ड्रॉप होता है। मेरे पास 200+ सादे SKSpriteNode के साथ कोई झगड़ा नहीं है और उनमें से लगभग 30 SKShapeNode के साथ 80 नोड्स होने पर सबकुछ ठंडा हो जाता है। बेशक कोई अतिरिक्त कार्यक्षमता के साथ, केवल एक पथ, स्ट्रोक/भरें रंग और लाइनविड्थ

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