0

私は cocos2d で関数を使用して円を作成しました。draw円の線上のタッチポイントを検出しようとしています。ユーザーが円の下部に触れたとしましょう。270 を印刷したい場合、ユーザーが円の上部に触れた場合は 90 などを印刷したい.. ..

私はこの質問を見てきましたが、最初にスプライトを検出してから、円の内側または外側に触れているかどうかを比較します

http://www.cocos2d-iphone.org/forum/topic/21629

サークル内のタッチを検出する方法

- (void) draw
{
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    glLineWidth(10.0f);
    ccDrawColor4F(0.2f, 0.9f, 0.02f, 0.6f);
    CGPoint center = ccp(winSize.width*0.88, winSize.height*0.8);
    CGFloat radius = 100.f;
    CGFloat angle = 0.f;
    NSInteger segments = 100;
    BOOL drawLineToCenter = YES;

    ccDrawCircle(center, radius, angle, segments, drawLineToCenter);
}

サークル ライン上のタッチ ポイントを検出するにはどうすればよいですか?

4

3 に答える 3

0

中心点とタッチ位置がわかっている場合は、円のどこにあるかを知るために必要なものがすべて揃っているはずです。

円を検出する方法のコードを使用していると仮定しています

タッチが円の内側にある場合は、円の中心点とタッチ ポイントを取得し、2 つを比較して X と Y のオフセットを確認します。X/Y オフセットに基づいて、円のどの部分 (上、左、右、下など) がクリックされたかを把握できるはずです。角度が必要な場合は、2 点の傾きを見つけます。

于 2013-01-29T18:51:03.010 に答える
0

これを試して、コードをテストせず、必要に応じて改善してください

-(BOOL) ccTouchBegan:(UITouch*)touch withEvent:(UIEvent*)event
{    
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    CGPoint location = [[CCDirector sharedDirector] convertToGL:[touch locationInView:[touch view]]];
    CGPoint center=ccp(winSize.width*0.88, winSize.height*0.8);

    //now test against the distance of the touchpoint from the center change the value acording to your need
    if (ccpDistance(center, location)<100)
    {
        NSLog(@"inside");

        //calculate radians and degrees in circle
        CGPoint diff = ccpSub(center, location);//return ccp(v1.x - v2.x, v1.y - v2.y);
        float rads = atan2f( diff.y, diff.x);
        float degs = -CC_RADIANS_TO_DEGREES(rads);
        switch (degs) 
        {
            case -90:
            //this is bottom
            break;
            case 90:
                //this is top
                break;
            case 0:
                //this is left side
                break;
            case 180:
                //this is right side
                break;
            default:
                break;
        }
    }   
    return YES;
}
于 2013-02-06T18:28:43.227 に答える
0

ccTouchBegan/Moved/EndedカスタムCCNode:::に追加できます

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    NSLog(@"ccTouchBegan Called");
    if ( ![self containsTouchLocation:touch] ) return NO;
    NSLog(@"ccTouchBegan returns YES");
    return YES;
}

- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint touchPoint = [touch locationInView:[touch view]];
    touchPoint = [[CCDirector sharedDirector] convertToGL:touchPoint];

    NSLog(@"ccTouch Moved is called");
}

- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
    NSLog(@"ccTouchEnded is called");
}

次にtouch、a について説明したのと同じように処理しますCCSprite(つまり、タッチと の間の距離を計算し、centerタッチが円に属するかどうかを判断します)。

于 2013-01-29T17:30:56.277 に答える