2012-08-22 22 views
0

我做的绘图应用程序,我在用户与CCRenderTexture借鉴。它基本上保持渲染一个黑色圆圈的图片来模拟绘图。当我慢慢地移动手指时,由于圈子聚集在一起形成一条线,所以它运作得非常好。然而,当我快速移动我的手指,它最终只是被圈了一堆没有连接(http://postimage.org/image/wvj3w632n/)。我的问题是我如何获得渲染纹理来更快地渲染图像或使其填充空白。需要CCRenderTexture呈现更快的ios

而且,我不是完全靠这种方法出售,但它同时环顾四周我找到什么了。随意提出你认为会更好的建议。我最初使用ccdrawline,但它真的杀死了我的表现。谢谢!

回答

2

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

在.h文件中

CCRenderTexture *target; 
CCSprite* brush; 
在.m文件

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]; 

的init方法

添加触摸方法,我表示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]; 


     } 
    } 
} 

希望它能为你工作。

+0

伟大的作品!我想赞成票你,如果我能...另外,就行了“如果(距离> 1)”我做到了“如果(距离> 0.1)”,这样慢运动也将借鉴。 – Brian

+0

@布莱恩好东西。我没有为缓慢的触摸测试,但听起来不错。我也会使用那个并测试它。 – Marine