Премахването на SKAction (това е възпроизвеждане на MP3) незабавно, докато се чака за завършване, е ДА

Опитвам се да премахна многократно възпроизвеждан MP3, когато два възела се сблъскат.

SKAction* gameBeat = [SKAction playSoundFileNamed:@"gameBeat.mp3" waitForCompletion:YES];
SKAction* gameBeatLoop = [SKAction repeatActionForever: gameBeat];
[self runAction:gameBeatLoop withKey:@"gameBeatzz"];

след това по-късно в моя код, където имам сблъсък, поставям:

[self removeActionForKey:@"gameBeatzz"];

но изчаква, докато MP3 свърши с възпроизвеждането, което не искам.

Ако променя waitForCompletion на NO, ПРИЛОЖЕНИЕТО просто се обърква и няма да направи нищо.

Как да премахна MP3 незабавно, вместо да чакам MP3 файлът да приключи


person Chocolate Drop    schedule 16.11.2013    source източник
comment
Можете ли да използвате AVAudioPlayer вместо това?   -  person godel9    schedule 17.11.2013
comment
Или действителен аудио двигател като ObjectAL. Не мисля, че това, което искате да направите, може да се направи с минималистичните функции за аудио възпроизвеждане на Sprite Kit.   -  person LearnCocos2D    schedule 17.11.2013


Отговори (1)


Нормално е, ако зададете своя waitForCompletion bool на NO, приложението да не прави нищо. Това е така, защото действието се счита за завършенонезабавно.

Действието за playSoundFileNamed не е обратимо и прави окончателна промяна в сцената, когато бъде премахнато, то продължава до края...
Някои SKAction са напълно премахнати от възела когато изпълнявате метода removeAction, но някои продължават да работят.

playSoundFileNamed е създаден да възпроизвежда кратки звуци, а не фонов звук.

Препоръчвам да използвате AVAudioPlayer, който ви позволява по-голям контрол върху музиката.

person Vincent Dondain    schedule 21.02.2014