cocos2d を使用する際の知識を広げようとしていますが、2 つの質問があります: 1. CGRects の目的とは何ですか?
1 に答える
CGRect は C 構造体であり、Core Graphics (したがって CG) の一部として定義されています。つまり、これは「データ」コンテナーであり、それ以上でもそれ以下でもありません。
ご存知のように、実際にはさらに 2 つの C 構造体、原点の CGPoint とサイズの CGSize で構成されています。
Mac の Core Graphics (Quartz) では、左下の座標系が原点を定義します。これは、OpenGL と Cocos2d の原点でもあります。iOSでは左上です。その原点がどこにあるかは、多くの場合、ビュー階層などの現在の場所によって異なります (UIView ドキュメントのフレームと境界を参照してください)。
ただし、これは CGRect に違いはありません。構造体は座標系を強制せず、原点とサイズを持つデータ型を定義するだけです。iOS で使用される座標系に対して 45 度回転して定義された座標系でも同様に機能します。もちろん、一貫した使用が期待されます。
2 番目の質問に答えるために、衝突検出のサンプル コードを示します。
NSMutableArray *projectilesToDelete = [[NSMutableArray alloc] init];
for (CCSprite *projectile in _projectiles) {
NSMutableArray *monstersToDelete = [[NSMutableArray alloc] init];
for (CCSprite *monster in _monsters) {
if (CGRectIntersectsRect(projectile.boundingBox, monster.boundingBox)) {
[monstersToDelete addObject:monster];
}
}
for (CCSprite *monster in monstersToDelete) {
[_monsters removeObject:monster];
[self removeChild:monster cleanup:YES];
}
if (monstersToDelete.count > 0) {
[projectilesToDelete addObject:projectile];
}
[monstersToDelete release];
}
for (CCSprite *projectile in projectilesToDelete) {
[_projectiles removeObject:projectile];
[self removeChild:projectile cleanup:YES];
}
[projectilesToDelete release];
概念全体をよりよく理解するために、ray による優れたチュートリアルへのリンクを次に示します。 http://www.raywenderlich.com/25736/how-to-make-a-simple-iphone-game-with-cocos2d-2-x-tutorial