0

人々が線を引くことができるように、「ホワイトボード」を追加しようとしています。

唯一の問題は、私が非常に速く描画すると、スプライトがかなり離れた場所に配置されるため、文字や数字を描画しようとしてもほとんど判読できないことです。異なるスプライトの間にはたくさんのスペースがあります。

これが私の方法で、ほとんどの描画が行われていると思います。

-(void) update:(ccTime)delta
    {
        CCDirector* director = [CCDirector sharedDirector];
        CCRenderTexture* rtx = (CCRenderTexture*)[self getChildByTag:1];

        // explicitly don't clear the rendertexture
        [rtx begin];

        for (UITouch* touch in touches)
        {
            CGPoint touchLocation = [director convertToGL:[touch locationInView:director.openGLView]];
touchLocation = [rtx.sprite convertToNodeSpace:touchLocation];

        // because the rendertexture sprite is flipped along its Y axis the Y coordinate must be flipped:
        touchLocation.y = rtx.sprite.contentSize.height - touchLocation.y;


        CCSprite* sprite = [[CCSprite alloc] initWithFile:@"Cube_Ones.png"];
        sprite.position = touchLocation;
        sprite.scale = 0.1f;
        [self addChild:sprite];
        [placedSprites addObject:sprite];
    }

    [rtx end];
}


Maybe this is the cause?

[self scheduleUpdate];  

ただし、更新間の時間を短縮する方法は完全にはわかりません。

前もって感謝します

4

1 に答える 1

1

問題は、単純に、ユーザーが 2 つのタッチ イベント間でタッチ位置 (つまり、指) を大きく移動できることです。100x100 で 1 つのイベントを受け取り、次の指はすでに 300x300 になっている可能性があります。それについてあなたができることは何もありません。

ただし、2 つのタッチ位置間の変化は直線的な動きであると想定できます。つまり、たとえば 10 ピクセルの距離よりも離れた 2 つのタッチを単純に分割し、それらを 10 ピクセルの距離間隔で分割できます。したがって、実際には中間のタッチ位置を自分で生成します。

これを行う場合、2 つのタッチ間の最小距離を制限することをお勧めします。そうしないと、ユーザーが非常に狭い領域に大量のスプライトを描画する可能性があり、これは望ましくありません。したがって、新しいタッチ位置が前の位置から 5 ピクセル離れている場合にのみ、新しいスプライトを描画します。

于 2012-09-15T08:07:45.327 に答える