2012-04-05 10 views
0

私はcocos2dアプリケーション内にいくつかのプリミティブを描画する必要があります。図面をカプセル化するために、私はdrawメソッドを上書きしているカスタムCCSpriteを作成しました。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がスプライトを描くことを期待しているので、2つのオブジェクトを分けるのは意味がありません。これを行う方法は本当にありませんか? (例:この例外がスローされたかどうかを判断するためにチェックされる何らかのプロパティを手動で設定する場合) – gorootde

+1

バッチノードとカスタムノードをX、Yの空のCCNodeの子として追加することはできません。あなたのカプセル化。単にバッチの一部ではないものを、バッチ描画操作で描画することはできません。 – badgerr

関連する問題