0

テクスチャーのあるスプライトを作ろうとしていますが、スプライトのサイズがわかりません。私が知っているように、カスタムrectを使用してフレームでスプライトを初期化できます。

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。ただし、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に従い、これを正しく、美しく行うことをお勧めします)。

  1. CCSpriteのサブクラスPRFilledPolygon(デフォルトではCCNodeです)
  2. box2dのテンプレートによって生成されたPhysicsSpriteのクローンを作成し、PRFilledPolygon(デフォルトではCCSprite)からサブクラス化します。
  3. 体を初期化するときは、以前と同じように、PhysicsSpriteの新しいクラスを使用します。
于 2012-05-18T07:40:07.780 に答える