2

ヘルプと提案を通じて、不透明な部分だけに触れることができるように、スプライトのパスを作成しました。これは私が思いついた道です:

    path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL, endTouch.x, endTouch.y);
    CGPathAddLineToPoint(path, NULL, 0, 250);
    CGPathAddLineToPoint(path, NULL, 30, 0);
    CGPathCloseSubpath(path);

これは、1つを除く他のすべてのクラスで機能します。どこをタップしても、xcodeは次のコードを使用して「外部」に印刷し続けます。

for(int i = 0; i < [sprArray count]; i++)
{
    CCSprite *sprite = (CCSprite *)[sprArray objectAtIndex:i];
    if(CGRectContainsPoint([sprite boundingBox], location))
    {
        selectedSprite = sprite;
        location = [selectedSprite convertToNodeSpace:location];
        if (CGPathContainsPoint(path, NULL, location, NO) ) 
        {
            NSLog(@"inside");
        }
        else 
        {
            NSLog(@"outside");
        }

        break;
    }
}

スプライトを移動できるのは、if条件の中に入る場合のみですが、それ以外の場合は、実際の色付きのスプライトをタップしても、設定したパスを取得できません。私の測定値は間違っていますか?そうでない場合、私は何を間違っていますか?これは私が使おうとしている画像に似ています...

サンプル

4

1 に答える 1

1

これは、画像サイズが同じ場合にのみ機能します。画像サイズに応じて座標を計算します。

ここに画像の説明を入力

CGPathMoveToPoint(path,    NULL,   54, 0 ); //1: 54 = distance from left, 0 = dis fem bottom
CGPathAddLineToPoint(path, NULL,   28, 34 );
CGPathAddLineToPoint(path, NULL,   36, 76 );
CGPathAddLineToPoint(path, NULL,   51, 104 );
CGPathAddLineToPoint(path, NULL,   46, 147 );
CGPathAddLineToPoint(path, NULL,   67, 147 );
CGPathAddLineToPoint(path, NULL,   70, 105 );
CGPathAddLineToPoint(path, NULL,   56, 66 );
CGPathAddLineToPoint(path, NULL,   52, 42 );
CGPathAddLineToPoint(path, NULL,   67, 20 );
CGPathAddLineToPoint(path, NULL,   92, 0 );
CGPathCloseSubpath(path);
于 2013-02-19T09:27:09.257 に答える