2013-11-02 18 views
5

ile ilk kez ses yürütürken küçük gecikme [self playSoundFileNamed] kullanarak bir ses yürütürken, tüm uygulamanın yaklaşık yarım saniye boyunca dontuğu ilk kez bir ses çaldığında küçük bir gecikme olur. ama bundan sonra iyi. Bundan nasıl kurtulabilirim?SpriteKit

cevap

15

Oyun kurulum yöntemimde, böyle bir şey yapıyorum ve iyi çalışıyor gibi görünüyor.

bir Ivar

SKAction *_ballsHitSound; 

Set mı o kadar zaman yük sahne

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

sonra ses

[self runAction:_ballsHitSound]; 
+1

Duraklat, sesin ilk yüklemesidir. Esasen, bu ses dosyalarının yüklenmesini oyunun kurulumunda yapmak, önyükleme ve kesinlikle gitmek için doğru yol gibidir. Kurulum sırasında bu duraklama var, ancak kurulum sırasında duraklama yönetilebilir. – prototypical

+0

Büyük olasılıkla bir SKLabel için bir font yüklenerek aynı duraklama yaşanır. Bu yüzden, kurulum sırasında da oyun sırasında kullandığınız yazı tipleriyle SKLabels'i yüklemek en iyisidir. Örneğin, yalnızca oyun sırasında kullanılan puan pop-up'ları için belirli bir fontunuz varsa. – prototypical

0

playSoundFileNamed gitmeye hazır: aksiyon oynamak için yapılır Oyununuzun ses efektleri, arka plan müziği veya daha büyük ses dosyaları gibi küçük sesler. Daha büyük ses dosyalarını oynatmayı planlıyorsanız, ses reprodüksiyonu üzerinde daha fazla kontrol sağlayan AVAudioPlayer sınıfını daha iyi kullanırsınız.

// 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

Sana arka plan iş parçacığı üzerinde oynamak için çalışacağını söyledi bu yüzden ana iş parçacığı üzerinde sesleri oynatmak gerekmez düşünüyorum: İşte nasıl kullanılacağını bir kod parçacığı var.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { 
     // Play it here 
    }); 
İlgili konular