せでぃのブログ

ブログ初心者おいどんのどうでもいい愚痴やどうでもいい愚痴やどうでもいいマメ知識などを披露するチラシの裏です。

当たり判定

Objective-Cと戦うブログ-当たり判定で遊んでみる
ここのサイトを元に当たり判定を試してみる。そろそろプロジェクトのファイルが面倒くさくなってきたので、githubで公開してみました。githubあんまわからないので、落とせなかったらごめんなさい。


あたり判定についての考え方はここら辺を。
cocos2dやIPhone/iPadのゲームで「当たり判定」を実装する方法。
気になる点が1つあって、コード中の当たり判定エリアの座標を、実際のシミュレータの動きをみて少しずらしてある。本来ならxibの座標と合わせればいいだけのはずなんだけど、うーん、ちょっと謎。


1.以前の画像をドラッグするプロジェクトを開く
端折りたいので、この辺の記事で作った画像ドラッグのプロジェクトを用意する。
画像をドラッグする

2.当たり判定を出すエリアの作成
※ここのviewの作成を、参考サイトの通りにコードでやれば位置ずれは回避できそうかな。
xibを選択し、iphoneの画面の中心に120x120の大きさのimageViewを置く。
エリアをわかり易くするため、backgroundcolorに赤を選択。見た目だけなので、特に関連付けとかは必要ない。
f:id:Sediment:20130805193655p:plain
f:id:Sediment:20130805193707p:plain

3.コードの入力
今回変更するのは以下の部分のみ。
f:id:Sediment:20130805193725p:plain

DraggableImageView.m

int i = 0;
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
    CGPoint pt = [[touches anyObject] locationInView:self];
    CGRect frame = [self frame];
    
    frame.origin.x += pt.x - startLocation.x;
    frame.origin.y += pt.y - startLocation.y;
    
    [self setFrame:frame];
    
    //目標ビューと同じ大きさのビューを作成
    UIView *viewAField = [[UIView alloc]initWithFrame:CGRectMake(100, 170, 120, 120)];
    //ビューと画像が重なり合ったか判定
    if (CGRectIntersectsRect(self.frame, viewAField.frame)) {
        i++;
        NSLog(@"当たり!%d回目",i);
    }
}

4.run
画像を2枚入れて、いじってみた。
f:id:Sediment:20130805194300p:plain


プロジェクトファイル公開)
github

参考)
Objective-Cと戦うブログ-当たり判定で遊んでみる
cocos2dやIPhone/iPadのゲームで「当たり判定」を実装する方法。
サイズ指定