Нарисуйте линию или прямоугольник на слое cocos2d - PullRequest
3 голосов
/ 17 марта 2011

Можете ли вы дать мне знать, как лучше всего нарисовать линию или прямоугольник на слое сцены с помощью Cocos2d ios4 iphone.

До сих пор пробовал Texture2d, но он больше похож на кисть и не так хорош.Пробовал рисовать линию, используя метод draw, но предыдущая линия исчезает при рисовании другой линии.

В основном хочу нарисовать несколько горизонтальных, вертикальных, наклонных балок.Пожалуйста, предложите.Любой код очень поможет.

Код для рисования с использованием текстуры приведен ниже:

CGPoint start = edge.start;
            CGPoint end = edge.end;
            // begin drawing to the render texture
            [target begin];

            // for extra points, we'll draw this smoothly from the last position and vary the sprite's
            // scale/rotation/offset
            float distance = ccpDistance(start, end);
            if (distance > 1)
            {
                int d = (int)distance;
                for (int i = 0; i < d; i++)
                {
                    float difx = end.x - start.x;
                    float dify = end.y - start.y;
                    float delta = (float)i / distance;
                    [brush setPosition:ccp(start.x + (difx * delta), start.y + (dify * delta))];
                    [brush setScale:0.3];
                    // Call visit to draw the brush, don't call draw..
                    [brush visit];
                }
            }
            // finish drawing and return context back to the screen
            [target end];

Рендеринг не очень хороший esp.с косыми линиями, поскольку масштабирование влияет на качество.

Приветствия

Ответы [ 2 ]

2 голосов
/ 27 июня 2012

Вам необходимо добавить метод рисования к вашему слою:

-(void) draw {
    // ...
}

Внутри него вы можете использовать некоторые openGL-подобные функции и методы-обертки cocos2d для openGL.

Подсказка: другие методы могут бытьВызванный внутри метод draw .Но имейте в виду, что использование другого имени для метода, содержащего инструкции openGL, которое не вызывается внутри draw, упомянутого выше, просто не будет работать.Даже при вызове из метода обновления или другого метода, используемого селектором scheduleUpdate.

Таким образом, вы получите что-то вроде этого:

-(void) draw {
    glEnable(GL_LINE_SMOOTH);
    glColor4ub(255, 0, 100, 255);
    glLineWidth(4);
    CGPoint verts[] = { ccp(0,200), ccp(300,200) };
    ccDrawLine(verts[0], verts[1]);

    [self drawSomething];
    [self drawSomeOtherStuffFrom:ccp(a,b) to:ccp(c,d)];

    [someObject doSomeDrawingAsWell];
}

Для получения дополнительной информации ознакомьтесь с руководством по программированию cocos2d-iphone:

http://www.cocos2d -iphone.org / wiki / doku.php / prog_guide: draw_update? S [] = schedule # draw

2 голосов
/ 29 марта 2011

Вы можете создать отдельный слой и вызвать метод рисования следующим образом:

-(void) draw
{
    CGSize s = [[Director sharedDirector] winSize];

    drawCircle( ccp(s.width/2,  s.height/2), circleSize, 0, 50, NO);

Это для круга, но принцип тот же.Это из проекта, который я сделал некоторое время назад, и он работал тогда.Не знаю, изменилось ли что-нибудь с тех пор.

...