Game Studio
Liên kế mạng xã hội

Game Studio


Giới Thiệu Audio Trong Cocos2d-x 3.x.x

Giới thiệu

Âm thanh là một phần không thể thiếu trong một game. Nó giúp cho game của bạn thêm hấp dẫn, kịch tính. Trong bài viết này tôi và các bạn sẽ cùng tìm hiểu về Audio trong Cocos2d-x 3.x.x.

Tiền đề bài viết

Bài viết này là bài viết đầu tiên trong những loạt bài viết của tôi về tổng quan làm game 2D sử dụng Cocos2d-x 3.4.

Đối tượng hướng đến

Bài viết này tôi hướng đến những lập trình viên mới bắt đầu tìm hiểu và học tập làm game 2D bằng Cocos2d-x.

Simple Adio Engine

Là một đối tượng singleton được Cocos2d-x xây dựng nhằm giúp những người lập trình game tạo ra âm thanh cũng như các hiệu ứng âm thanh trong trò chơi của họ. Bạn có thể gọi nó bất cứ nơi nào trong code của bạn. SimpleAdioEngine hỗ trợ một số định dạng bao gồm MP3 Core Audio Format.

Background music

Thường được dùng để làm nhạc nền cho trò chơi.

Ví dụ: Scene Menu Game.

  1. // Khởi tạo audio.
  2. auto audio = SimpleAudioEngine::getInstance();
  3.  
  4. // Thiết lập play background music và được lặp đi lặp lại liên tục.
  5. audio->playBackgroundMusic("stdio.mp3", true);
  6.  
  7. // Thiết lập play background music và hoạt động được 1 lần.
  8. audio->playBackgroundMusic("stdio.mp3", false);

Sound effect

Giả sử trong game của bạn có một va chạm giữa hai đối tượng, bạn cần một âm thanh nhỏ để thể hiện sự va chạm đó đó. 

  1. // Khởi tạo audio
  2. auto audio = SimpleAudioEngine::getInstance();
  3.  
  4. // Thiết lập chạy effect music, và được chạy 1 lần.
  5. audio->playEffect("stdioEffect.wav", false, 1.0f, 1.0f, 1.0f);

Ở đoạn code trên bạn sẽ thấy một đoạn như sau: 1.0f, 1.0f, 1.0f .Đây là một điều tương đối khó hiểu, có thể chỉ có những nhạc sĩ mới hiểu rõ hết về giá trị này này, tôi chỉ muốn nói sơ cho bạn hiểu chút ít về các thông số trên.

  • 1.0f đầu điên: Đây là giá trị Pitch[0.5 tới 2.0]. Đây có thể hiểu như giá trị âm thanh của Audio như cho nốt cao hơn hay cho nốt thấp hơn. Ở giá trị 1.0f thì giá trị này là giá trị của file audio gốc.
  • 1.0f thứ hai: Đây là giá trị Pan[-1.0 tới 1.0]. Hiệu ứng âm thanh Stereo.
  • 1.0f thứ ba: Đây là giá trị Gain[0.0 tới max]. Đây chính là âm lượng của Audio. với giá trị 1.0f là âm lượng ban đầu của file audio gốc.

Trong game, ngay sau khi bắt đầu chạy một background music hay effect music, tùy vào mục đích của bạn tại một thời điểm nào đó trong game bạn sẽ cần phải pause(tạm dừng), stop(tắt), resume(bật lại). 

Pause

  1. // Khởi tạo audio.
  2. auto audio = SimpleAudioEngine::getInstance();
  3.  
  4. // pause background music.
  5. audio->pauseBackgroundMusic();
  6.  
  7. // pause một sound effect.
  8. audio->pauseEffect();
  9.  
  10. // pause tất cả sound effects.
  11. audio->pauseAllEffects();

Stop

  1. // Khởi tạo audio.
  2. auto audio = SimpleAudioEngine::getInstance();
  3.  
  4. // stop background music.
  5. audio->stopBackgroundMusic();
  6.  
  7. // stop một sound effect.
  8. audio->stopEffect();
  9.  
  10. // stops tất cả sound effects.
  11. audio->stopAllEffects();

Resume

  1. // Khởi tạo audio.
  2. auto audio = SimpleAudioEngine::getInstance();
  3.  
  4. // resume background music.
  5. audio->resumeBackgroundMusic();
  6.  
  7. // resume một sound effect.
  8. audio->resumeEffect();
  9.  
  10. // resume tất cả các sound effects.
  11. audio->resumeAllEffects();

Một số chức năng Audio cao cấp khác

Setup

Sẽ có chuyện gì nếu người chơi đang chơi game của bạn trên thiết bị di động bỗng có một cuộc gọi tới và họ cần phải nghe cuộc điện thoại đó, hay một tác vụ của điện thoại mà người chơi cần phải xử lý. Đừng lo lắng vấn đề này, trong Cocos2d-x khi có một tác vụ của thiết bị xảy ra bạn có thể tạm dừng trò chơi.

  1. // Tạm dừng trò chơi.
  2. void AppDelegate::applicationDidEnterBackground() {
  3. Director::getInstance()->stopAnimation();
  4.  
  5. // Nếu bạn có sử dụng SimpleAudioEngine bạn nên pause nó lại.
  6. // SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
  7. }
  8.  
  9. // Gọi trò chơi của bạn trở lại khi bạn đã hoàn thành xong các tác vụ cần xử lý.
  10. void AppDelegate::applicationWillEnterForeground() {
  11. Director::getInstance()->startAnimation();
  12.  
  13. // Nếu bạn có sử dụng SimpleAudioEngine bạn nên resume nó hoạt động trở lại.
  14. // SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
  15. }

Với các dòng comment cho SimpleAudioEngine, nếu bạn đang sử dụng background music hay sound effect, hãy bỏ nó đi để sử dụng.

Pre-Loading sound

Trước khi bắt đầu trò chơi, bạn nên nạp các file audio vào cho game của bạn. Điều này giúp trò chơi của bạn được liền mạch hơn, không bị gián đoạn do cứ phải tới lúc cần thiết mới thiếp lập file audio vô trò chơi.

  1. // Khởi tạo audio.
  2. auto audio = SimpleAudioEngine::getInstance();
  3.  
  4. // background music.
  5. audio->preloadBackgroundMusic("stdioBackGroungMenuGame.mp3");
  6. audio->preloadBackgroundMusic("stdioBackGroungGamePlay.mp3");
  7.  
  8. // sound effect.
  9. audio->preloadEffect("stdioEffeectShot.wav");
  10. audio->preloadEffect("stdioEffectCollision.wav");
  11.  
  12. // khi không cần sử dụng đoạn nhạc nào đó trong trò chơi.
  13. audio->unloadEffect("stdioBackGroundMenuGame.mp3");

Volume

Nhằm thay đổi âm lượng của Audio, với một giá trị kiểu float.

  1. // Khởi tạo audio
  2. auto audio = SimpleAudioEngine::getInstance();
  3.  
  4. // Thiết lập giá trị âm lượng cho audio của bạn với một giá trị kiểu float
  5. audio->setEffectsVolume(0.5f); // với 0.0f là nhỏ nhất và 1.0f là lớn nhất.

Tổng kết

Với việc thêm âm thanh vào trò chơi của bạn, tôi tin rằng trò chơi của bạn đá có một diện mạo mới, hấp dẫn hơn. Nhưng một bạn nên lưu ý, tránh sử dụng nhiều âm thanh nhất là sound effect để tránh gây "loạn" cho người chơi, bạn có thể sử dụng các thâm thanh vui nhộn để tạo cảm giác thoải mái. Kết hợp với button và slider để tùy chỉnh âm thanh trong trò chơi của bạn.

Tham khảo

http://www.cocos2d-x.org

Theo: Stdio