用Objective-C / Cocos2D绘制一个填充的正方形

时间:2012-10-02 18:06:33

标签: objective-c cocos2d-iphone fill

我绝望地试图用Cocos2D绘制一个填充的方块,我无法找到一个如何做的例子:

这是我的绘制方法。我成功地画了一个广场,但我无法填补它!

我读过我需要使用一个名为glDrawArrays的OpenGL方法,其参数为GL_TRIANGLE_FAN,以便绘制一个填充的方块,这就是我尝试过的方法。

-(void) draw
{
    // Disable textures - we want to draw with plaine colors
    ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position | kCCVertexAttribFlag_Color );

    float l_fRedComponent = 0;
    float l_fGreenComponent = 0;
    float l_fBlueComponent = 0;
    float l_fAlphaComponent = 0;
    [mpColor getRed:&l_fRedComponent green:&l_fGreenComponent blue:&l_fBlueComponent alpha:&l_fAlphaComponent];

    ccDrawColor4F(l_fRedComponent, l_fGreenComponent, l_fBlueComponent, l_fAlphaComponent);
    glLineWidth(10);

    CGPoint l_bottomLeft, l_bottomRight, l_topLeft, l_topRight;
    l_bottomLeft.x = miPosX - miWidth / 2.0f;
    l_bottomLeft.y = miPosY - miHeight /  2.0f;
    l_bottomRight.x = miPosX + miWidth /  2.0f;
    l_bottomRight.y = miPosY - miHeight /  2.0f;
    l_topRight.x = miPosX + miWidth /  2.0f;
    l_topRight.y = miPosY + miHeight /  2.0f;
    l_topLeft.x = miPosX - miWidth /  2.0f;
    l_topLeft.y = miPosY + miHeight /  2.0f;

    CGPoint vertices[] = { l_bottomLeft, l_bottomRight, l_topRight, l_topLeft, l_bottomLeft };
    int l_arraySize = sizeof(vertices) / sizeof(CGPoint) ;

    // My old way of doing this, it draws a square, but not filled.
    //ccDrawPoly( vertices, l_arraySize, NO);

    // Deprecated method :(
    //glVertexPointer(2, GL_FLOAT, 0, vertices);

    // I've found something related to this method to replace the deprecated one, but can't understand this method !
    glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, 0, vertices);
    glDrawArrays(GL_TRIANGLE_FAN, 0, l_arraySize);  
}

我在旧版Cocos2D(1.0)中找到了一些示例,但由于它最近已升级到version 2.0,所以我找到的所有示例都给出了编译错误!

有人可以在这里开辟我的道路吗?

2 个答案:

答案 0 :(得分:7)

我今天不知道是“重塑轮子”的日子。 :)

ccDrawSolidRect(CGPoint origin, CGPoint destination, ccColor4F color);

如果你要疯狂并且想画出填充的多边形,那么还有:

ccDrawSolidPoly(const CGPoint *poli, NSUInteger numberOfPoints, ccColor4F color);

“固体”方法是Cocos2D 2.x中的新方法。

答案 1 :(得分:0)

您可以简单地创建具有所需内容大小的CCLayerColor实例,并将其用作填充方块。在其他情况下,您必须对多边形进行三角测量(如果是正方形,它将有两个三角形)并使用OpenGL绘制它。

--- EDIT 没有测试这个代码,用谷歌找到它,但似乎工作正常。

http://www.deluge.co/?q=cocos-2d-custom-filled-polygon