更好地理解cocos2d中的CGRect

时间:2013-10-18 03:21:27

标签: iphone cocos2d-iphone

我正在尝试扩展我的知识,当使用cocos2d时,我有两个问题:1。什么是CGRects的目的和2.如果它曾经使精灵碰撞,我该怎么做?

1 个答案:

答案 0 :(得分:1)

CGRect是一个C结构,定义为Core Graphics的一部分(因此是CG),即它是一个“数据”容器,仅此而已。

它实际上是由另外两个C结构组成的,一个CGPoint用于原点,一个CGSize用于大小,你无疑会意识到。

在Mac上的Core Graphics(Quartz)中,坐标系左下角定义了原点,也适用于OpenGL,因此也定义了Cocos2d。在iOS上它是左上角。原点通常取决于您所在的位置,例如视图层次结构(查看UIView文档中的框架和边界)。

但是,这对CGRect没有任何影响,结构不强制执行坐标系,只定义具有原点和大小的数据类型。它对于定义为旋转45度的坐标系统同样适用于iOS上使用的坐标系统 - 期望您在使用中保持一致,当然

回答第二个问题,这是一个碰撞检测的示例代码。

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