我正在制作一个绘图应用,我正在让用户使用CCRenderTexture进行绘制。它基本上保持渲染黑色圆圈的图片以模拟绘图。当我慢慢地移动我的手指时,它工作得很好,因为圆圈聚集在一起形成一条线。但是,当我快速移动手指时,它最终只是一堆未连接的圆圈(http://postimage.org/image/wvj3w632n/)。我的问题是如何获得渲染纹理以更快地渲染图像或者为我填充空白。
另外,我并没有完全以这种方法出售,但这是我在环顾四周时发现的。随意提出你认为会更好的建议。我最初使用ccdrawline,但它确实杀了我的表现。谢谢!
答案 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