私は解決策を見つけました。CCNode / CCSpriteを任意の形状で描画し、任意のテクスチャで塗りつぶすためのオープンソースキットがあります:PRKit。ただし、cocos2dv2.0では機能しません。これを解決するにdraw
は、PRFilledPolygon.mのメソッドを次のメソッドに置き換えます。
-(void) draw {
ccGLBindTexture2D( [self.texture name] );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position | kCCVertexAttribFlag_TexCoords );
[prog use];
[prog setUniformForModelViewProjectionMatrix];
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, sizeof(CGPoint), areaTrianglePoints);
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(CGPoint), textureCoordinates);
glDrawArrays(GL_TRIANGLES, 0, areaTrianglePointCount);
}
そして、prog (CCGLProgram *)
で定義されていますinitWithPoints:andTexture:usingTriangulator:
prog = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTexture];
また、Box2Dを使用している場合、このPRFilledPolygonをb2Bodyと互換性を持たせるには、次のようにします(これは怠惰な方法です。OOPに従い、これを正しく、美しく行うことをお勧めします)。
- CCSpriteのサブクラスPRFilledPolygon(デフォルトではCCNodeです)
- box2dのテンプレートによって生成されたPhysicsSpriteのクローンを作成し、PRFilledPolygon(デフォルトではCCSprite)からサブクラス化します。
- 体を初期化するときは、以前と同じように、PhysicsSpriteの新しいクラスを使用します。