2014-05-08 15 views
5

Tôi đang phát triển trò chơi lái xe sử dụng SpriteKit và đang gặp sự cố với hiệu ứng âm thanh của động cơ.Chơi hiệu ứng âm thanh động cơ cho trò chơi SpriteKit trên iOS ... AVAudioPlayer vs SKAction vs?

Tôi muốn có hai âm thanh động cơ khác nhau. Một cho khi nút ga được nhấn và một cho khi nút ga không được nhấn. Một trong hai âm thanh sẽ được chơi liên tục trong khi trò chơi đang diễn ra.

Cách tiếp cận tốt nhất là gì? Các tệp âm thanh của tôi có quá ngắn (0,10 giây hoặc ít hơn) và được lặp lại hay chúng phải dài và chỉ bật và tắt? Tôi có nên sử dụng SKAction để phát âm thanh hoặc AVAudioPlayer hoặc cái gì khác không? Tôi đã thử sử dụng AVAudioPlayer nhưng mỗi khi tôi tạm dừng và phát trình phát (bật hoặc tắt điều chỉnh tốc độ), tốc độ khung hình của trò chơi trong giây lát sẽ giảm. Bất kỳ trợ giúp được đánh giá cao!

+1

Phát triển trượt là cực kỳ thô sơ. Bạn có thể muốn nhìn vào ObjectAL. – LearnCocos2D

+0

Cập nhật mới nhất của Mục tiêu là 2013-04-16. Mức độ ổn định của nó với các phiên bản iOS mới hơn? – salocinx

Trả lời

6

Dựa trên nhận xét của LearnCocos2D, tôi đã xem xét ObjectAL. Đối với những người không quen thuộc với ObjectAL, nó được thiết kế để trở thành một giao diện đơn giản và trực quan cho OpenALAVAudioPlayer. Bạn có thể tải về và tìm hiểu thêm thông tin về nó ở đây ...

http://kstenerud.github.io/ObjectAL-for-iPhone/index.html

Đối với clip âm thanh của tôi, tôi sử dụng từ 3 đến 5 dài tập tin âm thanh .caf thứ hai của một âm thanh động cơ. ObjectAL cho phép tôi liên tục lặp lại và thay đổi độ cao của tệp âm thanh. Bằng cách thay đổi độ cao, tôi có thể mô phỏng động cơ ở các tốc độ khác nhau.

Dưới đây là một mẫu mã ...

Hai biến thành viên hoặc bạn có thể cài đặt chúng như là tài sản ...

ALBuffer *_buffer; 
ALSource *_source; 

Phương pháp để khởi tạo hiệu ứng âm thanh động cơ ...

- (void)initializeSound 
{ 
    // We'll let OALSimpleAudio deal with the device and context. 
    // Since we're not going to use it for playing effects, don't give it any sources. 
    [OALSimpleAudio sharedInstance].reservedSources = 0; 

    _source = [ALSource source]; 
    _buffer = [[OpenALManager sharedInstance] bufferFromFile:@"EngineSound.caf"]; 
    _source.pitch = 0.30; // Start at low pitch for engine idle. 
    [_source play:_buffer loop:YES]; 
} 

Bên trong phương thức cập nhật của tôi SKScene Tôi điều chỉnh độ cao theo tốc độ.

- (void)update:(CFTimeInterval)currentTime 
{ 
    CGFloat enginePitch; 

    // Code to calculate desired enginePitch value based on vehicle speed. 

    _source.pitch = enginePitch; 
} 

Do một lỗi bị cáo buộc trong SpriteKit, tôi đã có một vấn đề với một lỗi gpus_ReturnNotPermittedKillClientEXC_BAD_ACCESS khi đóng ứng dụng. Tôi đã tìm thấy bản sửa lỗi tại đây ...

https://stackoverflow.com/a/19283721/3148272

2

Tôi khuyên bạn nên sử dụng AVAudioPlayer. Bạn cần phải có nó trong tài sản và không tạo ra mỗi khi bạn muốn chơi một cái gì đó. SKAction là xấu theo cách mà bạn không thể dừng hoặc hủy nó (thậm chí bằng cách xóa hành động).

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