2017-04-13 15 views
5

Chúng tôi đã xác định nguyên nhân gây ra sự cố với tuyên bố sử dụng SCNAction.playAudio trong trò chơi của chúng tôi. Nếu bất kỳ playAudio báo cáo được gọi trong trò chơi của chúng tôi, deinitialization của SCNScene/SCNView sẽ sau đó kích hoạt một cách ngẫu nhiên tai nạn này:SCNAction.playAudio gây ra sự cố khi các nút được khởi tạo

enter image description here

Làm thế nào chúng tôi chơi âm thanh:

func playAudioSource(from node: SCNNode, source audioSource: SCNAudioSource) { 
    node.runAction(SCNAction.playAudio(audioSource, waitForCompletion: false)) 
} 

Nó cho thấy EXC_BAD_ACCESS tại số CPP3DAudioEngine::RemoveContext. Chúng tôi đang phát triển dành cho iOS 10,3 sử dụng SceneKit và Swift 3.

+0

Hãy thử bật đối tượng zombie, điều này có thể giúp xác định đối tượng được khởi tạo dễ dàng hơn. –

+0

đối tượng zombie, đăng nhập malloc tất cả không thể chỉ ra vấn đề – mauris

+0

Hmm ... Tôi không chắc chắn vấn đề là gì sau đó. Bạn đề cập đến rằng nó bị treo ngẫu nhiên; đây có phải là khoảng thời gian sau khi phát âm thanh không? –

Trả lời

4

Bạn nên cung cấp mã hơn để hiểu rõ hơn về những gì xảy ra trong trò chơi của bạn, nhưng chắc chắn bạn có thể sửa chức năng của bạn với:

func playAudioSource(from node: SCNNode, source audioSource: SCNAudioSource) { 
    if let _ = node.parent, node.action(forKey: "playAudio") == nil { 
     node.runAction(SCNAction.playAudio(audioSource, waitForCompletion: false),forKey:"playAudio") 
    } 
} 

Điều này ngăn cản sự ra mắt của hành động khi hành động đã được khởi chạy hoặc trong quá trình thực thi và kiểm tra xem liệu nút của bạn đã được đính kèm với phụ huynh hay chưa (điều này có thể hữu ích, nó phụ thuộc vào nơi bạn khởi chạy mã này ..)

+0

không khắc phục được. Tôi hoặc phát âm thanh trên rootNode của cảnh hoặc trên các nút cụ thể trong cảnh. nhất là không có vị trí. Có vẻ như CPP3DAudioEngine đang cố xóa ngữ cảnh nhưng đã bị xóa. – mauris

+2

Hãy thử thêm nhiều mã hơn, đặc biệt là phần bạn khởi chạy playAudioSource này, nơi bạn thực hiện chính xác vì CPP3DAudioEngine removeContext chỉ trong các tình huống cụ thể .. –

+0

trường hợp như vậy: logic trò chơi phát một âm thanh (chạy 'playAudioSource' một lần) trên nút gốc của cảnh sau khi 'SCNScene' được tải. Âm thanh nhỏ hơn 1s. Sau khoảng 15 giây, tôi rời khỏi trò chơi và bộ điều khiển xem cùng với mọi thứ được giải mã. Sau một thời gian rất ngắn, 'EXC_BAD_ACCESS' được ném – mauris

Các vấn đề liên quan