2015-07-15 3 views
1

До сих пор я нашел возможность решить эту проблему:Swift SpriteKit Звук на узле

Я пытаюсь добавить звуковой эффект к определенному узлу. Когда узел удаляется из родителя, звук должен останавливаться. Звук должен также останавливаться при касании узла. Я попробовал это с помощью playSoundFileNamed («name», waitForCompletion: false), но вы не можете остановить это действие.

В фоновом режиме проигрыватель аудио-аудио воспроизводит звук.

Было бы неплохо, если бы у кого-то появились новые идеи.

ответ

1

Короче говоря, вы не можете остановить звуки, воспроизводимые с помощью SKAction. Как вы уже упоминали, вы можете использовать AVAudioPlayer для этой цели (я не уверен в возможностях с этим при использовании для sfx). Или вы можете использовать библиотеку ObjectAL, которая является перформансом. Метод SKAction playSoundFileNamed, вероятно, предназначен для воспроизведения коротких звуков, но у вас нет другого контроля, кроме как для воспроизведения звука. Вы не можете приостановить или возобновить его или подобное. Удаление клавиши действия также не поможет остановить звук до завершения воспроизведения (например, вы не можете остановить звук посередине).

Вы также можете проверить SKAudioNode, который доступен в iOS 9.0 и более поздних версиях. Для работы с SKAudioNode существует set of SKAction methods. Лично я не пробовал их, но, возможно, это может стоить того.

Надеюсь, это поможет.

0

Вы можете попробовать подклассы SKSpriteNode , которые вы можете настроить spriteNode по своему вкусу

 
import SpriteKit 

class SoundSourceNode: SKNode { 

    let spriteNode = SKSpriteNode(color: UIColor.greenColor(), size: CGSize(width: 20, height: 20)) 
    let audioNode = SKAudioNode(fileNamed: "Boing-One Low.mp3") 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    init(size: CGSize) 
    { 
     spriteNode.position = CGPoint(x: 0, y: 0) 
     audioNode.positional = true 
     audioNode.position = CGPoint(x: 0, y: 0) 

     super.init() 

     self.addChild(spriteNode); 
     self.addChild(audioNode); 
    } 
} 

Обратите внимание, что SKAudioNode доступен в iOS9 и позже

Смежные вопросы