2012-04-05 55 views
0

我必須在cocos2d應用程序中繪製一些原始圖元。爲了封裝圖形,我創建了一個自定義的CCSprite,我正在覆蓋draw方法。Cocos2d:創建沒有內容的精靈

@implementation EnergyBar 

-(id) init { 
    if(self=[super init]){ 
     [self setAnchorPoint:ccp(0,0)]; 
    } 
    return self; 
} 

-(void) draw 
{ 
    [super draw]; 

    glEnable(GL_LINE_SMOOTH); 
    glColor4ub(80, 80, 80, ENERGY_ALPHA); 
    glLineWidth(1); 




    CGPoint vertices2[] = { ccp(0,0), 
     ccp(ENERGY_WIDTH,0), 
     ccp(ENERGY_WIDTH,ENERGY_HEIGHT), 
     ccp(0,ENERGY_HEIGHT) 
    }; 
    ccDrawPoly(vertices2, 4, YES); 

} 

節點按預期繪製矩形。只要我試圖添加此節點作爲CCSpriteBatchNode的子項,我會收到一個異常'NSInternalInconsistencyException', reason: 'CCSprite is not using the same texture id'。 在這個節點中,我不想使用父級的精靈貼圖中定義的任何貼圖。那麼如何將這個節點作爲CCSpriteBatchNode的子節點來避免這個異常呢?

回答

2

你不能做到這一點:)

CCSpriteBatchNode的目標是,家長吸入批調用所有的孩子(所以你draw不會被調用)。您需要將精靈添加到其他父級(不是CCSpriteBatchNode)。

+0

批處理節點負責繪製與能量棒相關的對象。以合乎邏輯的方式,僅僅因爲cocos2d希望孩子繪製一個精靈而將這兩個對象分開是沒有意義的。真的沒有辦法做到這一點? (例如,手動設置某種被檢查以確定是否引發此異常的屬性? – gorootde 2012-04-05 11:49:01

+1

沒有理由不能將您的批處理節點和自定義節點添加爲位於X,Y的空CCNode的子節點,並保留某些部分你的封裝,你只是不能在批處理繪製操作中繪製不屬於批處理的東西。 – badgerr 2012-04-05 14:56:33