連載 :
実践!iOSで作るゲームアプリゲームの仕上げ
2011年6月3日(金)

今回でこの連載も最終回となる、最後にサウンド再生、残りタイム表示と、ゲームがタイトル画面とゲーム画面のフローでループできるよう実装して、ゲーム部分の仕上げをしたいと思う。
サウンドの再生
まずはサウンドの再生から実装していこう。ゲーム中ではSE(サウンドエフェクト)とBGMの2つを鳴らすが、それぞれ必要なフレームワークをプロジェクトに追加する必要がある。AudioToolboxとAVFoundationの2つのフレームワークを追加しよう。
| 図1:フレームワークの追加(クリックで拡大) |
そして、GameController.h に以下のようにサウンド用のプロパティーを追加しておく。
@interface GameController : NSObject {
GameBoardView *gameView;
GamePieceView *pieceView; //うさぎ
GamePieceView *enemyView; //オオカミ
int carotCount;
BOOL isGameClear;
//サウンド
NSMutableArray* seArray; //SEの配列
AVAudioPlayer* bgmPlayer; //BGM再生クラス
}
SEの再生
まずSEを再生しよう。サウンドデータを作りプロジェクトに追加する必要がある、本来はシーンごとにSEを用意するのだが今回は1つのSEを鳴らすようにする。iOSでは .aif / .wav / .mp3 などの一般的なフォーマットを再生することができるが、今回は se00.caf というコア・オーディオというフォーマットのサウンドファイルを使用することにする。コア・オーディオファイルについては後ほど説明する。
SEは再生用のクラスとそのインスタンス作り、それで再生を行う。以下がSE再生用のクラスになる。
<クラス定義>
#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioServices.h>
@interface SoundEffect : NSObject {
SystemSoundID soundID;
}
- (id)initWithContentsOfFile:(NSString *)path;
- (void)play;
@end
<クラス実装部>
#import "SoundEffect.h"
@implementation SoundEffect
- (id)initWithContentsOfFile:(NSString *)path {
self = [super init];
if (self != nil) {
NSURL *aFileURL = [NSURL fileURLWithPath:path isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)aFileURL, &soundID);
}
return self;
}
-(void)dealloc {
AudioServicesDisposeSystemSoundID(soundID);
[super dealloc];
}
-(void)play {
AudioServicesPlaySystemSound(soundID);
}
@end
GameControllerクラスの初期化時に以下のコードを追加して SoundEffectのインスタンスを配列の保持しておく。
// SE
seArray = autorelease];
efView.isFinishDelete = NO;
efView.isLoop = NO;
[gameView addSubview:efView];
efView.center = CGPointMake(320/2, 460/2);
[efView setAnimeBoundsScaleFrom:0.0 To:1.0 Duration:0.5];
}
}
「ゲームの仕上げ」サンプルプログラム
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

