में एफपीएस बूंदें मैं स्विफ्ट & स्प्राइटकिट के साथ एक साधारण गेम विकसित कर रहा हूं, और मैंने देखा है कि एफपीएस 60 से 58-59 (और पीछे) से गिरता है। वहाँ एक ध्यान देने योग्य अंतराल जब ड्रॉप होता है - ऐसा लगता है कि 1 या 2 तख्ते गिरा दिया जाता है।स्प्राइटकिट
सीपीयू लोड लगभग 20-25% है और बहुत कुछ नहीं बदलता है, स्मृति उपयोग स्थायी रूप से लगभग 8 एमबी है।
वहाँ स्क्रीन पर 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. वास्तव में, वास्तव में अजीब है: मैंने स्पर्श से सभी कोड हटा दिए हैं, और यह अभी भी छूने पर है! विधि पूरी तरह से खाली है। मुझे नहीं पता क्यों, लेकिन अगर मैं कई बार क्लिक करता हूं तो एफपीएस ड्रॉप हो जाता है ...
इसे कैसे डिबग करें?
मुझे संदेह है कि आपकी समस्या स्कैक्सा और भौतिकी इंजन को कैसे मिलाएं इस तरह से है। मैंने आपके कोड निष्पादन में सभी को नहीं देखा है मैंने देखा है कि आप चाल का उपयोग कर आवेग लागू कर रहे हैं। उन दोनों अच्छी तरह से एक साथ प्लेट नहीं है। तो जांचें कि क्या वे दो हस्तक्षेप नहीं कर रहे हैं ... यह एक शुरुआत होगी। – Whirlwind
अधिक सटीक, SKActions * को ऑब्जेक्ट्स को स्थानांतरित करने के लिए उपयोग नहीं किया जाना चाहिए यदि आप पहले से ही भौतिकी इंजन का उपयोग करके उन वस्तुओं को स्थानांतरित करते हैं। यदि आप केवल संपर्कों में रूचि रखते हैं तो भौतिकी इंजन के साथ कार्यों का उपयोग करना ठीक है। – Whirlwind
1 से 2 एफपीएस में एक बूंद आपकी आंखों से ध्यान देने योग्य नहीं होगी, इसलिए आप जो अंतराल कह रहे हैं, वह अंतराल नहीं हो सकता है, यह मुख्य धागे पर रोक सकता है, या यह दोषपूर्ण प्रोग्रामिंग के कारण एक अवांछित प्रभाव हो सकता है। वास्तव में जो हो रहा है, उसके बारे में अधिक जानकारी आपके मामले में सहायक हो सकती है, या शायद आप इसे http://codereview.stackexchange.com/ पर ले जाना चाहेंगे और लोगों को यह देखने दें कि आप अपने कोड के साथ कहां गलत हैं। – Knight0fDragon