2013-10-18 38 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的示例代碼中的碰撞檢測代碼片段用來顯示碰撞的樣子。它並不意味着什麼。這個問題非常模糊,沒有真正的代碼幫助請求。它只是問它是如何完成的。所以我把那部分放在那裏展示。也放置了進一步研究的鏈接。 –