2017-05-05 3 views
0

작은 게임을 개발 중이며 처음에는 완벽하게 작동합니다. 그것은 sks 파일과 사운드 파일을 꽤 잘로드합니다. 그러나 몇 분의 테스트를 마친 후에는 "사운드 리소스로드 오류"가 발생하고 입자 효과가 모두 사라집니다.갑자기 더 이상 파일을 읽을 수 없습니다.

나는 그것이 메모리 문제일지도 모른다라고 생각했다. 그러나 게임은 단지 약 120M 걸린다. 그리고 나는 아직 어떤 기억 경고도받지 않고 있었다.

그래서 처음 몇 분 안에 파일을 읽을 수 있습니까? 몇 분 후에 그렇게 할 수 없습니까? SpriteKit에서 모르는 뭔가가 있습니까? 100 파일을 성공적으로로드 한 후, 사용자가 iPhone을 두 번 흔들어 뒤집을 때까지 게임에서 더 이상 파일을 읽을 수 없습니다. 사실이라면 게임 자습서에서 선수에게 알릴 수 있습니다.

아무도 내가 이것을 처리하는 데 도움이 될 수 있습니까? ...? 다른 노드가 읽는 때까지 어렵다

// The way I load background music: 

let musicPath=Bundle.main.path(forResource: "Main", ofType: "mp3") 
let url = URL(fileURLWithPath: musicPath!) 
do{ 
    try main=AVAudioPlayer(contentsOf: url)  
}catch{  
    return 
} 

// The way I load sound files: 

let a = SKAction.playSoundFileNamed("Fire",waitForCompletion:false) 
audioNode.run(a) 


// The way I load SKS files: 

let emitterPath = Bundle.main.path(forResource: "Fire", ofType: "sks")! 
let emitter = NSKeyedUnarchiver.unarchiveObject(withFile: emitterPath) as! SKEmitterNode 
self.addChild(emitter) 

답변

0

덕분에 많이 ... 코드를 보지 않고 말을하지만, 당신이 파일 리더를 많이 개방하는 경우는 메모리가 부족할 수 또는 파일을 액세스 할 수 없게 파일이 사라졌습니다.

새로운 오디오 노드를 만들 때마다 생성하는지 알고 있습니까?

사과 설명서에서는 하나의 SKAction을 만들어 재사용 할 것을 제안합니다. 그래서 Fire 액션을 재사용해야한다면, 새 SKAction을 반복해서 할당하는 대신에 그 싱글 톤을 만들어서 그 하나의 오브젝트를 반복해서 실행할 것입니다.

Source

+0

OK, 나는 질문을 편집하고 위의 내 코드를 제공했다. 파일을 닫는 방법 ..? –

+0

죄송합니다. 스프라이트를 어떻게로드했는지 오해 한 것 같습니다. 업데이트 내 대답 – Ganksy

+0

고마워. 나는 그것을 시도 할 것이다, 그러나 나는 아직도 입자 실종 문제를 해결하는 방법을 모르겠다. :) –

관련 문제