在cocos2d层上画线或矩形

3
请问如何使用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];

渲染效果不好,尤其是对斜线的影响很大,因为缩放会影响质量。
祝好

1
你看过绘制基元示例吗? - xuanweng
是的,但只能画一条线。再画一条会使之前的线消失。整个图形应该在绘制方法中一次性重做吗? - MountainRock
是的,你需要一个数组来存储所有行的位置。因此,在绘制方法中,它循环遍历该数组并获取所有位置进行绘制。 - xuanweng
2个回答

2
您可以创建一个单独的图层,并像这样调用绘制方法:
-(void) draw
{
    CGSize s = [[Director sharedDirector] winSize];

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

虽然这是一个针对圆形的示例,但原理是相同的。这个示例来自我之前做过的一个项目,当时它起作用了。不知道现在有没有任何变化。


4
drawCircle现在改为ccDrawCircle。 - Doug Molineux

2
你需要给你的图层添加一个绘制方法:
-(void) draw {
    // ...
}

在其中,您可以使用一些类似于openGL的函数和cocos2d对openGL的包装方法。

提示:其他方法可以在draw方法内调用。 但请记住,如果使用其他名称的方法来包含openGL指令,则不会从上述draw中调用它们。 即使从update方法或由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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接