需要CCRenderTexture来渲染更快的ios

时间:2012-08-22 23:37:52

标签: objective-c ios cocos2d-iphone

我正在制作一个绘图应用,我正在让用户使用CCRenderTexture进行绘制。它基本上保持渲染黑色圆圈的图片以模拟绘图。当我慢慢地移动我的手指时,它工作得很好,因为圆圈聚集在一起形成一条线。但是,当我快速移动手指时,它最终只是一堆未连接的圆圈(http://postimage.org/image/wvj3w632n/)。我的问题是如何获得渲染纹理以更快地渲染图像或者为我填充空白。

另外,我并没有完全以这种方法出售,但这是我在环顾四周时发现的。随意提出你认为会更好的建议。我最初使用ccdrawline,但它确实杀了我的表现。谢谢!

2 个答案:

答案 0 :(得分:2)

需要整理起点和终点之间的差距。我粘贴的代码可能会帮助您解决链接中显示的情况。

<。>文件中的

CCRenderTexture *target;
CCSprite* brush;
<。>在.m文件的init方法

target = [[CCRenderTexture renderTextureWithWidth:size.width height:size.height] retain];
[target setPosition:ccp(size.width/2, size.height/2)];
[self addChild:target z:1];
brush = [[CCSprite spriteWithFile:@"brush_i3.png"] retain];

添加touches方法我正在展示touchesMoved代码。

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint start = [touch locationInView: [touch view]];   
    start = [[CCDirector sharedDirector] convertToGL: start];
    CGPoint end = [touch previousLocationInView:[touch view]];
    end = [[CCDirector sharedDirector] convertToGL:end];
    printf("\n x= %f \t y= %f",start.x,start.y);
    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))];
            [target begin];
            [brush setColor:ccc3(0, 255, 0)];

            brush.opacity = 5;
            [brush visit];
            [target end];


        }
    }
}

希望它适合你。

答案 1 :(得分:0)

不是CCRenderTexture的速度太慢,以至于事件只会频繁发生。您需要填写收到的接触点之间的间隙。

这里有一个很棒的教程,您可能已经看过http://www.learn-cocos2d.com/2011/12/how-to-use-ccrendertexture-motion-blur-screenshots-drawing-sketches/#sketching