何はともあれ例を
とりあえずスプライトを表示して座標を取得してみます。CGSize winSize = [[CCDirector sharedDirector] winSize];
CCSprite *sp=[CCSprite spriteWithFile:@"image.png"];
sp.position=ccp(winSize.width/2, winSize.height/2);
[self addChild:sp];
CCLOG(@"%f %f", sp.position.x, sp.position.y);
CCLOG(@"%f %f", sp.boundingBox.origin.x, sp.boundingBox.origin.y);
//ログ出力結果
160.000000 240.000000
131.500000 211.500000
ログ出力結果を見てもらえば分かるのですが値に違いがあります。boundingBox.originで取得した方が値が少なくなっています。cocos2dの世界では通常、画面の左下が原点(0, 0)となっています。boundingBox.originで取得した方が原点に近いものになっていました。
なぜ?
なぜでしょうか。私もまだはっきりとはしていないのですが以下のエントリーの内容が関係しているのではないかなと思います。UIViewについて - Inside Out / Objective-C Blog
UIViewに関しての記事なのですが、こちらの記事から気になった部分を抜粋します。
矩形の原点であるoriginは「The origin is located in the lower-left of the rectangle.」、左下(lower-left)を指していると読めるではありませんか。
~ 中略 ~
やはり、originは画面の左上です。
lower-leftとは、iPhone画面の座標系(X軸は右にプラス、Y軸は下にプラス)上でのlower-left、見かけの左上を示すということのようです。
参考: UIViewについて - Inside Out / Objective-C Blog
iPhoneから見たら左下を示しているが、人(製作している側)から見たら左上をさしている(ように見える)、という解釈でいいのでしょうか(自身ありません・・・)。
cocos2dの場合では左下が基準になるのでboundingBox.originの取得すると原点から計算した値が取得された、ということなのかなと思います。
追記: 2013/02/22
以前の記事「frameとboundsの違い」で"origin"について書いていました。
originは左上隅、つまり原点からの距離を取得するみたいです。
0 件のコメント:
コメントを投稿