2012-10-02 1 views
1

Я desperatly пытается нарисовать заполненный квадрат с Cocos2D и я не могу управлять, чтобы найти пример о том, как это сделать:Рисунок заполненный квадрат с Objective-C/cocos2d

Вот мой метод рисования , Мне удалось рисовать квадрат, но я не могу его заполнить!

Я читал, что мне нужно использовать метод OpenGL под названием glDrawArrays с параметром 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 «в последнее время» все примерах я нахожу дать мне ошибку компиляции!

Может ли кто-нибудь просветить мой путь сюда, пожалуйста?

ответ

7

Я не знаю сегодня «Изобретать колесо» день. :)

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

Если вы должны были пойти все с умом и хотели сделать заполненные многоугольники, есть также:

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

«твердые» методы являются новыми в cocos2d 2.x.

+0

О, дорогой, дорогой, спасибо большое! Ваша книга замечательная кстати! –

0

Вы можете просто создать экземпляр CCLayerColor с необходимым размером содержимого и использовать его как заполненный квадрат. В другом случае вы должны триангулировать свой многоугольник (он будет иметь два треугольника в случае квадрата) и нарисовать его с помощью OpenGL.

--- EDIT Не тестировался этот код, найдите его с помощью Google, но он работает нормально.

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

Смежные вопросы