在 cocos2d 图层上画线或矩形

Posted

技术标签:

【中文标题】在 cocos2d 图层上画线或矩形【英文标题】:Draw line or rectangle on cocos2d Layer 【发布时间】:2011-03-16 23:17:18 【问题描述】:

您能否告诉我使用 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];

渲染效果不好,尤其是。使用斜线,因为缩放会影响质量。

干杯

【问题讨论】:

你看过绘制原语的例子吗? 可以,但只能画一条线。绘制另一个使其松开前一行。是否应该在 draw 方法中一次重做整个绘图? 是的..你需要一个数组来存储线条的所有位置..所以在draw方法中,它循环遍历数组并获取所有要绘制的位置.. 【参考方案1】:

您可以创建一个单独的图层并像这样调用 draw 方法:

-(void) draw

    CGSize s = [[Director sharedDirector] winSize];

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

这是一个圆圈,但原理是一样的。这是我不久前做的一个项目,当时它起作用了。不知道从那以后有什么变化。

【讨论】:

drawCircle 现在是 ccDrawCircle【参考方案2】:

你需要给你的图层添加draw方法:

-(void) draw 
    // ...

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

提示: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

【讨论】:

以上是关于在 cocos2d 图层上画线或矩形的主要内容,如果未能解决你的问题,请参考以下文章

Cocos2D 图层中的自定义滚动

Cocos2d 给图层添加背景图片?

cocos2D----CCLayer

在 cocos2d 精灵中访问纹理的矩形

cocos2d.js

如何使用 cocos2d 在自顶向下视图中的精灵下放置阴影