1

cocos2d を使用する際の知識を広げようとしていますが、2 つの質問があります: 1. CGRects の目的とは何ですか?

4

1 に答える 1

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

于 2013-10-18T05:04:21.363 に答える