2013-10-18 37 views
1

我试图扩展我在使用cocos2d时的知识,并且我有两个问题:1.什么是CGRects的目的和2.如果它用来使精灵碰撞,我该怎么做?在cocos2d中更好地理解CGRect

+1

使用此链接https://www.cocoanetics.com/2010/07/cgrect-tricks/ – Sport

回答

1

CGRect是一个C结构,被定义为Core Graphics(因此CG)的一部分,即它是一个“数据”容器,没有什么比这更简单了。它实际上是由另外两个C结构组成的,CGPoint为原点,CGSize为大小,正如你毫无疑问所意识到的那样。

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

但是,这对CGRect没有任何影响,该结构不执行坐标系统,只定义具有原点和大小的数据类型。对于定义为与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

+0

这里有些东西是用括号括起来的。另外,您可以将代码压缩到:CGRect targetRect = target.boundingBox;这也将确保它可以与任何anchorPoint一起工作,您明确假定anchorPoint为0.5,0.5 – LearnCocos2D

+0

@ LearnCocos2D,我只是将ray的示例代码中的碰撞检测代码片段用来显示碰撞的样子。它并不意味着什么。这个问题非常模糊,没有真正的代码帮助请求。它只是问它是如何完成的。所以我把那部分放在那里展示。也放置了进一步研究的链接。 –