我正在尝试使用纹理制作一个精灵,但精灵的大小我不知道。据我所知,我可以使用自定义rect:
初始化带有框架的精灵CCSpriteFrame *frame = [[CCSpriteFrame alloc] initWithTextureFilename:@"name.png" rect:CGRectMake(0, 0, 10, 10)];
sprite = [[CCSprite alloc] initWithSpriteFrame:frame];
如果纹理的大小更大,那么图像的大小,我需要将这个图像(或其中的一部分)与第一个图像左右对齐。 我该怎么做?
答案 0 :(得分:2)
我找到了解决方案。
有一个用于绘制任何形状的CCNode / CCSprite的开源工具包,并用任何纹理填充它:PRKit。但它不适用于cocos2d v2.0。要解决此问题,请将PRFilledPolygon.m中的draw
方法替换为:
-(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进行操作并且做得很好):