[iPhone][cocos2d] CCSprite の 表示されている位置を取得したい

タッチイベントなどで「スプライトの範囲知りたい!」ってことは多発すると思う。

で自分でそう思ったときに調べたメモ

とりあえずググっった

CCSpriteの 表示されている位置はどうやって得るのだろうかとテキトーにグーグルで検索したらプログラマメモ2: cocos2dです。タッチして表示したオブジェクトを動かすというコードを試している最中です。にたどり着いた

そこに載ってたコードが以下のもの

1
2
3
4
5
6
7
8
9
10
11
- (CGRect) rectForSprite:(CCSprite *)sprite{

float h = [sprite contentSize].height;
float w = [sprite contentSize].width;
float x = sprite.position.x - w/2;
float y = sprite.position.y - h/2;

CGRect rect = CGRectMake(x,y,w,h);

return rect;
}

でもこれじゃ困るよね

上のコードだと anchoPoint == CGPointMake(0.5f, 0.5f) の時だけしか使えないため anchorPoint を 変更できない。ということでテキトーに書き換えた。

1
2
3
4
5
6
7
8
9
// スプライトのCGRectを取得
CGRect CGRectWithSprite (CCSprite *sprite) {
return CGRectMake(
sprite.position.x - sprite.contentSize.width * sprite.anchorPoint.x,
sprite.position.y - sprite.contentSize.height * sprite.anchorPoint.y,
sprite.contentSize.width,
sprite.contentSize.height
);
}

これでオーケーね。

※ここで得られるCGRectはEAGLViewの座標系の値なので注意。ようする画面の左下がゼロ座標。

関連があるかもしれない記事