どうもです~。
予告編最終回です~。
「タッチをDelegateを実装して通知してもらう(送信側組み込み)」
次に、TouchViewをDelegateに対応させる。
TouchViewはDelegateを組み込まれたインスタンスを保管して、
タッチされたときに、このインスタンスのmyViewTouchedを呼び出すように組み込む。
xxxxMyTouchView.hでdelegateプロパティを定義
最初にxxxxMyTouchViewDelegateを組み込む
#import "xxxxMyTouchViewDelegate.h"
プロパティを宣言
@interface xxxxMyTouchView : UIView
@property(nonatomic, strong) id delegate; // 追加
@end
xxxxMyTouchView.mでDelegateに実装されたメソッドを呼び出す処理を追加
_delegateは、内部的にdelegateプロパティを呼び出すときの変数名
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"touched");
if (_delegate != nil){ // if文追加
[_delegate myViewTouched];
}
}
前回からの引き続きですね。
今度は、タッチを検出して、デリゲートを通じてタッチされたよ!って言う側の組み込みです。
「タッチをDelegateを実装して通知してもらう(受信側組み込み)」
最後に、MyViewにタッチされた通知を受けて処理を行うように設定する。
xxxxMyView.hの最初にxxxxMyTouchViewDelegateを読み込み。
#import "xxxxMyTouchViewDelegate.h"
クラス定義に対して、組み込みを宣言する記述をする。
@interface xxxxMyView : UIView
xxxxMyView.m内でselfをTouchViewのdelegateに設定して、処理の内容を実装
[self addSubview:_touch]; // MyViewにaddする
_touch.delegate = self; // selfをdelegateに設定
return self;
タッチされたあとの処理の実装する。
いまは、画像を表示切り替えをしてみる。
- (void)myViewTouched{
_img.hidden = !_img.hidden;
}
これで、Delegateの実装ができました。
画像のところをタッチするたびに、画像が出たり消えたりしたらOK!です。
今度は、タッチされたよ!って言われた側の実装です。
これで、デリゲートを使ってイベントをやりとりするところはおしまいです。
今回はもうひとつ。
「効果音をつける」
ゲームをつくるのであれば、タッチしたときに、ポチとかドッカーンとか出したいですね。
効果音を出してみますので、短いサウンドを2つ用意して、
画像と同じようにプロジェクトにドラッグしてください。
ファイル形式は、mp3, aiff, wavあたりでよいかと思います。
サンプルでは、"saound0.wav", "sound1.wav"としています。
iOSのサウンドには、システムサウンドと、オーティオサウンドがある。
システムサウンドは短い音声で、モノラル限定、再生のタイミングのみを制御できる。
オーティオサウンドは普通の音楽など。
今回は、効果音なので、システムサウンドを使う。
まず、AudioToolkitというフレームワークを使うので、プロジェクトに組み込む。
プロジェクトの一番上の水色のアイコンのところを選択。
ちょっと下にいって、Linked Frameworks and Librariesの+をクリック。
AudioToolbox.framrworkを選択してAdd
組み込みができたら、xxxxMyView.mに効果音を流す処理を書く。
最初に、AudioToolboxをソースに組み込む。
#import
サウンドIDを保管する変数を2つ追加
@implementation xxxxMyView{
UIImageView* _img;
xxxxMyTouchView* _touch;
SystemSoundID sid0; // 追加
SystemSoundID sid1; // 追加
}
サウンド再生用のメソッドを追加
- (SystemSoundID)loadSoundID:(NSString*)path{
SystemSoundID sid;
NSURL* url = [[[NSBundle mainBundle] resourceURL] URLByAppendingPathComponent:path];
NSLog(@"%@", url);
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &sid);
return sid;
}
- (void)soundPlay:(int)idx{
if (idx == 0){
if (sid0 == 0){
sid0 = [self loadSoundID:@"sound0.wav"];
}
AudioServicesPlaySystemSound(sid0);
}
else{
if (sid1 == 0){
sid1 = [self loadSoundID:@"sound1.wav"];
}
AudioServicesPlaySystemSound(sid1);
}
}
タッチした時に、表示→非表示のときは0、非表示→表示のときは1の効果音を再生
- (void)myViewTouched{
_img.hidden = !_img.hidden;
[self soundPlay:_img.hidden?1:0]; // サウンド再生処理を追加
}
これで音が出ればOKです。
ちょっとゲームらしくなってきた!かな?
最後に効果音についてのお話。
フレームワークを組み込んだり、使い方がちょっと特殊だったりするのだけど、
音が出るとモチベーションが違ってくるので、機会があったら早めに知っておくとよいかも。。
これで、ひととおりの説明はおしまいです。
明日、セミナー本番。
ちょっと今回いろいろあって準備に時間をつくれなかったりもしてるのですが、
ノートパソコンを用意したので、いろいろ画面で説明できると思います。
よかったら、来てください。明日です!
では。
↓↓セミナー詳細はこちら↓↓
場所:代々木研修室B1F(代々木駅徒歩1分) http://e-kaigi.eabc.jp/
日時:2013年10月18日(金)19:00-20:30
参加費:500円
定員:20名
詳しくはFBイベントページまで
追記:サウンド再生のメソッドの定義に誤りがありましたので訂正しました。
予告編最終回です~。
「タッチをDelegateを実装して通知してもらう(送信側組み込み)」
次に、TouchViewをDelegateに対応させる。
TouchViewはDelegateを組み込まれたインスタンスを保管して、
タッチされたときに、このインスタンスのmyViewTouchedを呼び出すように組み込む。
xxxxMyTouchView.hでdelegateプロパティを定義
最初にxxxxMyTouchViewDelegateを組み込む
#import "xxxxMyTouchViewDelegate.h"
プロパティを宣言
@interface xxxxMyTouchView : UIView
@property(nonatomic, strong) id
@end
xxxxMyTouchView.mでDelegateに実装されたメソッドを呼び出す処理を追加
_delegateは、内部的にdelegateプロパティを呼び出すときの変数名
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"touched");
if (_delegate != nil){ // if文追加
[_delegate myViewTouched];
}
}
前回からの引き続きですね。
今度は、タッチを検出して、デリゲートを通じてタッチされたよ!って言う側の組み込みです。
「タッチをDelegateを実装して通知してもらう(受信側組み込み)」
最後に、MyViewにタッチされた通知を受けて処理を行うように設定する。
xxxxMyView.hの最初にxxxxMyTouchViewDelegateを読み込み。
#import "xxxxMyTouchViewDelegate.h"
クラス定義に対して、組み込みを宣言する記述をする。
@interface xxxxMyView : UIView
xxxxMyView.m内でselfをTouchViewのdelegateに設定して、処理の内容を実装
[self addSubview:_touch]; // MyViewにaddする
_touch.delegate = self; // selfをdelegateに設定
return self;
タッチされたあとの処理の実装する。
いまは、画像を表示切り替えをしてみる。
- (void)myViewTouched{
_img.hidden = !_img.hidden;
}
これで、Delegateの実装ができました。
画像のところをタッチするたびに、画像が出たり消えたりしたらOK!です。
今度は、タッチされたよ!って言われた側の実装です。
これで、デリゲートを使ってイベントをやりとりするところはおしまいです。
今回はもうひとつ。
「効果音をつける」
ゲームをつくるのであれば、タッチしたときに、ポチとかドッカーンとか出したいですね。
効果音を出してみますので、短いサウンドを2つ用意して、
画像と同じようにプロジェクトにドラッグしてください。
ファイル形式は、mp3, aiff, wavあたりでよいかと思います。
サンプルでは、"saound0.wav", "sound1.wav"としています。
iOSのサウンドには、システムサウンドと、オーティオサウンドがある。
システムサウンドは短い音声で、モノラル限定、再生のタイミングのみを制御できる。
オーティオサウンドは普通の音楽など。
今回は、効果音なので、システムサウンドを使う。
まず、AudioToolkitというフレームワークを使うので、プロジェクトに組み込む。
プロジェクトの一番上の水色のアイコンのところを選択。
ちょっと下にいって、Linked Frameworks and Librariesの+をクリック。
AudioToolbox.framrworkを選択してAdd
組み込みができたら、xxxxMyView.mに効果音を流す処理を書く。
最初に、AudioToolboxをソースに組み込む。
#import
サウンドIDを保管する変数を2つ追加
@implementation xxxxMyView{
UIImageView* _img;
xxxxMyTouchView* _touch;
SystemSoundID sid0; // 追加
SystemSoundID sid1; // 追加
}
サウンド再生用のメソッドを追加
- (SystemSoundID)loadSoundID:(NSString*)path{
SystemSoundID sid;
NSURL* url = [[[NSBundle mainBundle] resourceURL] URLByAppendingPathComponent:path];
NSLog(@"%@", url);
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &sid);
return sid;
}
- (void)soundPlay:(int)idx{
if (idx == 0){
if (sid0 == 0){
sid0 = [self loadSoundID:@"sound0.wav"];
}
AudioServicesPlaySystemSound(sid0);
}
else{
if (sid1 == 0){
sid1 = [self loadSoundID:@"sound1.wav"];
}
AudioServicesPlaySystemSound(sid1);
}
}
タッチした時に、表示→非表示のときは0、非表示→表示のときは1の効果音を再生
- (void)myViewTouched{
_img.hidden = !_img.hidden;
[self soundPlay:_img.hidden?1:0]; // サウンド再生処理を追加
}
これで音が出ればOKです。
ちょっとゲームらしくなってきた!かな?
最後に効果音についてのお話。
フレームワークを組み込んだり、使い方がちょっと特殊だったりするのだけど、
音が出るとモチベーションが違ってくるので、機会があったら早めに知っておくとよいかも。。
これで、ひととおりの説明はおしまいです。
明日、セミナー本番。
ちょっと今回いろいろあって準備に時間をつくれなかったりもしてるのですが、
ノートパソコンを用意したので、いろいろ画面で説明できると思います。
よかったら、来てください。明日です!
では。
↓↓セミナー詳細はこちら↓↓
場所:代々木研修室B1F(代々木駅徒歩1分) http://e-kaigi.eabc.jp/
日時:2013年10月18日(金)19:00-20:30
参加費:500円
定員:20名
詳しくはFBイベントページまで
追記:サウンド再生のメソッドの定義に誤りがありましたので訂正しました。