我正在尝试在使用 cocos2d 时扩展我的知识,我有两个问题:1. CGRects 的目的是什么,以及 2. 如果它用于使精灵发生碰撞,我该怎么做?
问问题
376 次
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 回答