我找到了解决方案。有一个开源工具包用于绘制任何形状的 CCNode/CCSprite 并用任何纹理填充它:PRKit。但它不适用于 cocos2d v2.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,就像你之前做的那样。