4

画面全体に 9 つの六角形のスプライトがあり、それらの領域をタッチ可能にするために、それらの周りに特定のパスを指定する必要があります。すべての単一パスの座標をそれぞれ設定したくないので、最初のパス (六角形はすべて同じサイズ) を使用して、その原点を別の位置に移動することはできませんか? (今それを行うと、CGPathAddLineToPoint(); は前の六角形から六角形のポイントを追加します。アイデアが理解できたと思います... (写真を参照... 注: 右上の灰色の八角形は黒いものとまったく同じサイズと形状)![移動パスの座標と形状][1]

hex2TouchArea=CGPathCreateMutable();

    CGPathMoveToPoint(hex2TouchArea, NULL, 150,157);
    CGPathAddLineToPoint(hex2TouchArea, NULL, 130, 198);
    CGPathAddLineToPoint(hex2TouchArea, NULL, 146, 236);
    CGPathAddLineToPoint(hex2TouchArea, NULL, 195, 236);
    CGPathAddLineToPoint(hex2TouchArea, NULL, 218, 197);
    CGPathAddLineToPoint(hex2TouchArea, NULL, 193, 157);
    CGPathCloseSubpath(hex2TouchArea);

ここに画像でそれを示す写真を載せます
http://666kb.com/i/bz2ysevuw8n65rh3i.gif

*編集:投稿から解決策を得て、少し変更しました:*

-(CGMutablePathRef) drawHexagon:(CGPoint)origin
{
    //create mutable path
    CGMutablePathRef path = CGPathCreateMutable();

    CGPathMoveToPoint(path, nil, origin.x, origin.y);

    CGPoint newloc = CGPointMake(origin.x - 20, origin.y + 42);
    CGPathMoveToPoint(path, NULL, newloc.x, newloc.y);
    CGPathAddLineToPoint(path, NULL, newloc.x + 16,newloc.y + 38);
    CGPathAddLineToPoint(path, NULL, newloc.x + 49, newloc.y + 0);
    CGPathAddLineToPoint(path, NULL, newloc.x + 23,  newloc.y - 39);
    CGPathAddLineToPoint(path, NULL, newloc.x - 25,newloc.y - 40);
    CGPathAddLineToPoint(path, NULL, newloc.x -43, newloc.y + 0);
    CGPathCloseSubpath(path);
    return path;   

}
4

1 に答える 1

6

パスを再利用する最善の方法は、おそらくそれらのためのメソッドを作成することです。開始座標を追加して CGMutablePathRef を返す場所を作成して、パスが完了した後に描画できるようにします。

質問に入力したパスの例に基づいて、次のようになります。

-(CGMutablePathRef) drawHexagon:(CGPoint)origin
{
    //create mutable path
    CGMutablePathRef path = CGPathCreateMutable();

    CGPathMoveToPoint(path, nil, origin.x, origin.y);

    CGPoint newloc = CGPointMake(origin.x - 20, origin.y + 42);
    CGPathMoveToPoint(path, nil, newloc.x, newloc.y);
    CGPoint newloc = CGPointMake(newloc.x + 16, newloc.y + 38);
    CGPathMoveToPoint(path, nil, newloc.x, newloc.y);
    CGPoint newloc = CGPointMake(newloc.x + 49, newloc.y + 0);
    CGPathMoveToPoint(path, nil, newloc.x, newloc.y);
    CGPoint newloc = CGPointMake(newloc.x + 23, newloc.y - 39);
    CGPathMoveToPoint(path, nil, newloc.x, newloc.y);
    CGPoint newloc = CGPointMake(newloc.x - 25, newloc.y - 40);
    CGPathMoveToPoint(path, nil, newloc.x, newloc.y);
    CGPoint newloc = CGPointMake(newloc.x - 43, newloc.y + 0); //which should be you origin
    CGPathMoveToPoint(path, nil, newloc.x, newloc.y);

    CGPathCloseSubpath(path);
    return path;   
}

で呼び出すCGMutablePathRef path = [self drawHexagon:someStartingPoint];


編集されたコメント:

コンテキストへのパスを次のように追加できます:CGContextAddPath(context, path); 次に、たとえば次のように、好きなように描画します。CGContextDrawPath(context, kCGPathFill);

パスをコンテキストに追加した後は難しくありません。

これはうまくいくはずです。幸運を。

于 2011-11-29T12:23:56.490 に答える