组成的纹理

时间:2012-05-17 05:41:19

标签: iphone cocos2d-iphone

我正在尝试使用纹理制作一个精灵,但精灵的大小我不知道。据我所知,我可以使用自定义rect:

初始化带有框架的精灵
CCSpriteFrame *frame = [[CCSpriteFrame alloc] initWithTextureFilename:@"name.png" rect:CGRectMake(0, 0, 10, 10)];
sprite = [[CCSprite alloc] initWithSpriteFrame:frame];

如果纹理的大小更大,那么图像的大小,我需要将这个图像(或其中的一部分)与第一个图像左右对齐。 我该怎么做?

1 个答案:

答案 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进行操作并且做得很好):

  1. 来自CCSprite的子类PRFilledPolygon(默认情况下为CCNode)
  2. 制作一个由box2d模板生成的PhysicsSprite的克隆,并将其从PRFilledPolygon(默认情况下为CCSprite)子类化
  3. 当你启动你的身体时,使用新的PhysicsSprite类,就像你之前做的那样。