初心者のSWIFTアプリ開発記 ©たぬきち

肥満気味になってきたので筋トレに励んでいます! プログラミング頑張ります

【swiftアプリ開発】効果音をたくさん発生させても固まらない方法!?

奇跡的に軽くなった

結論

AVFoundationで効果音 → SKAction.playSoundFileNamed()

へと、偶然変えたらまったくカクカクしなくなった( ^ω^ )!

正直、この変更以外にも多少のコードの変化は伴っているが、やっぱり上記のものが原因じゃないかと・・・まぁ全然定かじゃないが(´・ω・`)

 
 
 

キャラクター大量発生

画面上にキャラクターを30、40ほど出現させるだけなら、予想に反して思いのほかカクカクせずに耐えてくれていた。前は一人ウサギを表示させたらカクカクしていたのに進歩したものだよo(`ω´ )o!!!

・・・だけども、それらのキャラクター全てが攻撃時に効果音を発生するようになったら全くダメ!!!カイジくんの欲望の解放の仕方くらいへたっぴ!

カクカクしすぎて不満爆発!!!焼き鳥ビールで毎日豪遊!!!!

この時は一番最初に買った参考書でのやり方で効果音発生させてました。

func preloadAudioEffects(effectFileNames:[String]){
        for (idx,effect) in audioEffectFiles.enumerate(){
            do{
                //1 get the file path URL
                let soundPath = NSBundle.mainBundle().resourcePath?.stringByAppendingPathComponent(effect)
                let soundURL = NSURL.fileURLWithPath(soundPath!)
                
                //2 load the file contents
                let player = try AVAudioPlayer(contentsOfURL: soundURL)
                
                //3 prepare the play
                player.numberOfLoops = 0
                player.prepareToPlay()
                
                //4add to the audio dictoinary
                audio[effect] = player
                
            }catch{
                print("loadmusicerror, + \(idx)")
            }
            
        }
    }
    func playEffect(name: String){
        if let player = audio[name]{
            if player.playing{
                player.currentTime = 0
                
            }else{
                player.volume = seVolume
                player.play()
            }
        }
    }

そして実際に効果音を発生させたいファイルでインスタンスをつくって、preload → playという感じです。ちなみに do,catch, try らへんは意味がわからずとにかく適当にいじってエラーが発生しなくった時点で良しとしたので、これが意味をなしているのかさえわかってないです(´・ω・`)。

たぶんpreloadであらかじめ読み込んでおくことで、それをしていなかった初期の頃よりははるかにスムーズになってました。でも今回はダメ・・・・

対策も思いつかない・・・・

・・・・(´・ω・`)

諦めて効果音をなくそうかと思ったんですが、そういえば今回のアプリの元となっているチュートリアルではキャラを大量発生させてもそれほどかくかくしていなかったような・・・(´・ω・`)

効果音を発生させている方法を見ていると、SKActionで全て行っていたので、ダメ元でやってみることに。ダメ元でダメだと思っていたけど、全然ダメじゃなかったo(`ω´ )o

まったくかくかくせーへんでござる!!!

import Foundation
import SpriteKit

class SoundManager {
    let soundAttack = SKAction.playSoundFileNamed("attack1.wav", waitForCompletion: false)
    let soundLaser = SKAction.playSoundFileNamed("laser1.wav", waitForCompletion: false)
    let explosion = SKAction.playSoundFileNamed("explode.wav", waitForCompletion: false)
    let victory = SKAction.playSoundFileNamed("victory.mp3", waitForCompletion: false)
    static let sharedInstance = SoundManager()
}

こんな感じのファイルをつくって

SoundManager.sharedInstance.soundAttack

という感じで使ってます。チュートリアル万歳(´・ω・`)

www.youtube.com

www.youtube.com

実際は音付いてます!

youtubeに初めてアップしたけどなんでも初体験はいいあるね👲。若返るわねー💁