0

お絵描きアプリを作っていて、ユーザーにCCRenderTextureで描いてもらっています。基本的には、描画をシミュレートするために黒い円の絵をレンダリングし続けます。ゆっくり指を動かすと、円が集まって線になるのでとてもうまくいきます。ただし、指をすばやく動かすと、接続されていない円の集まりになってしまいます ( http://postimage.org/image/wvj3w632n/ )。私の質問は、レンダリング テクスチャを取得してイメージをより高速にレンダリングする方法、または空白を埋める方法です。

また、私はこの方法に完全に納得しているわけではありませんが、周りを見回して見つけたものです. より良いと思うものは何でも自由に提案してください。私はもともと ccdrawline を使用していましたが、パフォーマンスが大幅に低下しました。ありがとう!

4

2 に答える 2

2

始点と終点の間のギャップを整理する必要があります。リンクで示した状況を解決するのに役立つコードを貼り付けています。

.h ファイル内

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


        }
    }
}

うまくいけば、それはあなたのために働くでしょう.

于 2012-08-23T05:17:30.347 に答える
0

CCRenderTexture の描画が遅すぎるということではなく、イベントが頻繁にしか発生しないということではありません。受け取ったタッチ ポイント間のギャップを埋める必要があります。

すでに見たことがあるかもしれない素晴らしいチュートリアルがここにあります。スケッチ

于 2012-08-23T04:41:09.570 に答える