2013-11-02 8 views
5

के साथ पहली बार ध्वनि बजाने में छोटी देरी जब मैं [स्वयं playSoundFileNamed] का उपयोग करके ध्वनि बजाता हूं, पहली बार ध्वनि चलाने के दौरान एक छोटी देरी होती है जहां पूरा ऐप एक सेकेंड के आधे के लिए फ्रीज करता है, लेकिन उसके बाद यह ठीक है। मुझे इससे कैसे छुटकारा मिल सकता है?SpriteKit

उत्तर

15

मेरी गेम सेटअप विधि में, मैं ऐसा कुछ करता हूं और ऐसा लगता है कि यह अच्छी तरह से काम करता है।

एक इवर

SKAction *_ballsHitSound; 

निर्धारित किया है इसे जब लोड दृश्य

_ballsHitSound = [SKAction playSoundFileNamed:@"ballsCollide.mp3" waitForCompletion:NO]; 

तो ध्वनि जाना

[self runAction:_ballsHitSound]; 
+1

विराम ध्वनि की प्रारंभिक लोडिंग है। अनिवार्य रूप से, गेम के लिए सेटअप में इन ऑडियो फ़ाइलों की सभी लोडिंग करना प्रीलोडिंग और निश्चित रूप से जाने का सही तरीका है। सेटअप के दौरान यह विराम मौजूद होगा, लेकिन सेटअप के दौरान रोकथाम योग्य है। – prototypical

+0

आपको एसकेएलएबल के लिए फ़ॉन्ट लोड करने के साथ ही वही विराम का अनुभव होगा। सेटअप के दौरान गेमप्ले के दौरान उपयोग किए जाने वाले फोंट के साथ SKLabels को भी लोड करना सबसे अच्छा है। उदाहरण के लिए यदि आपके पास स्कोर पॉपअप के लिए एक विशिष्ट फ़ॉन्ट है जो केवल गेमप्ले के दौरान उपयोग किया जाता है। – prototypical

0

playSoundFileNamed तैयार है: कार्रवाई खेलने के लिए किया जाता है छोटी आवाज़ें, जैसे आपके गेम के ध्वनि प्रभाव, पृष्ठभूमि संगीत या ऐसी बड़ी ध्वनि फ़ाइलें नहीं। यदि आप बड़ी ध्वनि फ़ाइलों को चलाने की योजना बनाते हैं तो आप बेहतर AVAudioPlayer क्लास का उपयोग करते हैं, जो आपको ध्वनि प्रजनन पर अधिक नियंत्रण देता है।

// Load and start background music 
    NSError *error; 
    NSURL * backgroundMusicURL = [[NSBundle mainBundle] URLForResource:@"background-music" withExtension:@"mp3"]; 
    self.backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error]; 
    self.backgroundMusicPlayer.numberOfLoops = -1; 
    [self.backgroundMusicPlayer prepareToPlay]; 
    [self.backgroundMusicPlayer play]; 
0

मुझे लगता है कि आप तो मैं पृष्ठभूमि धागे पर इसे खेलने की कोशिश करेंगे मुख्य थ्रेड पर अपने ध्वनियों खेलने के लिए की जरूरत नहीं है: इसका इस्तेमाल इस तरह के कोड का टुकड़ा है।

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { 
     // Play it here 
    }); 
संबंधित मुद्दे