私は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
の子として追加する方法はありますか?
バッチノードは、エネルギーバーが関連しているオブジェクトを描画します。論理的なやり方では、cocos2dがスプライトを描くことを期待しているので、2つのオブジェクトを分けるのは意味がありません。これを行う方法は本当にありませんか? (例:この例外がスローされたかどうかを判断するためにチェックされる何らかのプロパティを手動で設定する場合) – gorootde
バッチノードとカスタムノードをX、Yの空のCCNodeの子として追加することはできません。あなたのカプセル化。単にバッチの一部ではないものを、バッチ描画操作で描画することはできません。 – badgerr