1

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

4

1 回答 1

1

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

它实际上是由另外两个 C 结构组成的,一个 CGPoint 代表原点,一个 CGSize 代表大小,你肯定知道。

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

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

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

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 回答