0

我正在尝试制作带有纹理的精灵,但我不知道精灵的大小。据我所知,我可以用自定义矩形初始化一个带有框架的精灵:

CCSpriteFrame *frame = [[CCSpriteFrame alloc] initWithTextureFilename:@"name.png" rect:CGRectMake(0, 0, 10, 10)];
sprite = [[CCSprite alloc] initWithSpriteFrame:frame];

如果纹理的大小应该更大,那么图像的大小,我需要把这个图像(或它的一部分)与第一个并排放置。我怎样才能做到这一点?

4

1 回答 1

2

我找到了解决方案。有一个开源工具包用于绘制任何形状的 CCNode/CCSprite 并用任何纹理填充它:PRKit。但它不适用于 cocos2d v2.0。为了解决这个问题,用这个替换drawPRFilledPolygon.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 并正确执行此操作):

  1. CCSprite 的子类 PRFilledPolygon(默认为 CCNode)
  2. 制作一个由 box2d 模板生成的 PhysicsSprite 的克隆,并将其从 PRFilledPolygon 子类化(默认为 CCSprite)
  3. 当你初始化你的身体时,使用这个新类而不是 PhysicsSprite,就像你之前做的那样。
于 2012-05-18T07:40:07.780 回答