3

マルチタッチイベントの仕組みの基本を理解しています

  1. フィギュアがビュー/画面に触れると、そのビューはccTouchesBeganのセットで受け取りUITouchます。
  2. UITouch位置(CGPoint)と各指に固有の位置を保持します。
  3. 複数の指が同時にビューに触れると、2本UITouchがビューに送信されます。
  4. ビューはccTouchesBegan 2UITouch秒で受信されるかccTouchesBegan、指が次々に触れるたびにtwiseと呼ばれることがあります。
  5. finger1が動いている場合、ビューはccTouchesMoved1つで受け取りUITouchます。

私の質問は、各指のタッチで別々に線を引く方法です。1本または2本の指を画面に配置し、指のタッチの開始/移動/終了ごとに線を描画しますか?

以下のコードは、シングルタッチしかない場合は機能しますが、マルチタッチの場合は、上記のポイント3と4のために機能しません。

まさにこのように ここに画像の説明を入力してください

-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if ([touches count] > 0) {

        // handle multi touch
        UITouch *touch1 = [[touches allObjects] objectAtIndex:0];
        CGPoint touchLocation1 = [touch1 locationInView: [touch1 view]];
        touchLocation1 = [[CCDirector sharedDirector] convertToGL: touchLocation1];

        Edge *temEdge1 = (Edge*)[temEdges objectAtIndex:0];
        [[temEdge1 end] updateXY:touchLocation1];
        [[temEdge1 start] updateXY:touchLocation1];

        if ([touches count] > 1) {
            UITouch *touch2 = [[touches allObjects] objectAtIndex:1];
            CGPoint touchLocation2 = [touch2 locationInView: [touch2 view]];
            touchLocation2 = [[CCDirector sharedDirector] convertToGL: touchLocation2];

            Edge *temEdge2 = (Edge*)[temEdges objectAtIndex:1];
            [[temEdge2 end] updateXY:touchLocation2];
            [[temEdge2 start] updateXY:touchLocation2];

        }

    }
}

-(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

    if ([touches count] > 0) {

        // handle multi touch
        UITouch *touch1 = [[touches allObjects] objectAtIndex:0];
        CGPoint touchLocation1 = [touch1 locationInView: [touch1 view]];
        touchLocation1 = [[CCDirector sharedDirector] convertToGL: touchLocation1];

        Edge *temEdge1 = (Edge*)[temEdges objectAtIndex:0];
        [[temEdge1 end] updateXY:touchLocation1];


        if ([touches count] > 1) {
            UITouch *touch2 = [[touches allObjects] objectAtIndex:1];
            CGPoint touchLocation2 = [touch2 locationInView: [touch2 view]];
            touchLocation2 = [[CCDirector sharedDirector] convertToGL: touchLocation2];

            Edge *temEdge2 = (Edge*)[temEdges objectAtIndex:1];
            [[temEdge2 end] updateXY:touchLocation2];
        }

    }

}

-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    if ([touches count] > 0) {

        // handle multi touch
        UITouch *touch1 = [[touches allObjects] objectAtIndex:0];
        CGPoint touchLocation1 = [touch1 locationInView: [touch1 view]];
        touchLocation1 = [[CCDirector sharedDirector] convertToGL: touchLocation1];

        Edge *temEdge1 = (Edge*)[temEdges objectAtIndex:0];
        [[temEdge1 end] updateXY:touchLocation1];

        if ([touches count] > 1) {

            UITouch *touch2 = [[touches allObjects] objectAtIndex:1];
            CGPoint touchLocation2 = [touch2 locationInView: [touch2 view]];
            touchLocation2 = [[CCDirector sharedDirector] convertToGL: touchLocation2];

            Edge *temEdge2 = (Edge*)[temEdges objectAtIndex:1];
            [[temEdge2 end] updateXY:touchLocation2];
        }
    }

}
-(void)draw
{
    [super draw];
    glLineWidth(5.f);
    ccDrawColor4B(0, 0, 255, 255);
    for (Edge *temEdge in temEdges) {
        CGPoint start = [[temEdge start] toCCP];
        CGPoint end   = [[temEdge end] toCCP];
        ccDrawLine(start , end);
    }

}
4

1 に答える 1

1

タッチ位置の配列をさまざまなタッチに関連付けることができます (キーとして UITouches を持つ NSDictionary と値としてポイントの NSArrays のようなもの)。ccDrawLine次に、メソッドを使用して、または他の方法でこれらの線を描くことができますdraw。現在のタッチが終了する場所にこれらの配列を保存することを忘れないでください。

于 2012-11-26T07:44:59.713 に答える