Iphone detecta cada dedo y dibuja línea (usando cocos2d / openGL para dibujar)

Entiendo los conceptos básicos sobre cómo funciona el evento multitáctil.

  1. Cuando un editor toca la vista / pantalla, esa vista recibirá ccTouchesBegan con un set de UITouch .
  2. UITouch retendrá la location ( CGPoint ) y es única para cada dedo.
  3. Si más de un dedo toca la vista al mismo time, se UITouch 2 UITouch a la vista.
  4. En algún momento, la vista recibirá ccTouchesBegan con 2 UITouch 's o ccTouchesBegan se llamará twise para cada toque de dedo uno tras otro.
  5. Si finger1 está en movimiento, la vista recibirá ccTouchesMoved con un UITouch .

Mi pregunta es cómo dibujar líneas con cada toque de dedo por separado, poner los dedos 1 o 2 en la pantalla y dibujar línea para cada toque de dedo comenzó / movido / final?

El código de abajo funciona cuando hay un solo toque, pero para multi touch no funcionará debido al punto 3 y 4 anterior.

Exactamente como esto introduzca la descripción de la imagen aquí

 -(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 shanetworkingDirector] 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 shanetworkingDirector] 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 shanetworkingDirector] 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 shanetworkingDirector] 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 shanetworkingDirector] 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 shanetworkingDirector] 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); } } 

Puede tratar de asociar matrices de posiciones táctiles con diferentes toques (algo así como NSDictionary con UITouches como keys y NSArrays de puntos como valores). Luego puede dibujar estas líneas usando ccDrawLine o de cualquier otra manera si usa su método draw . Simplemente no olvide almacenar estas matrices en algún lugar donde finalice el toque actual.