cocos2d-iphone sprite movement ccsprite

cocos2d iphone - Movimiento Relativo Cocos2D Sprite



cocos2d-iphone movement (2)

Además, si desea que se mueva "relativo" a donde comenzó, en lugar de exactamente donde está el toque:

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ if([touches count] == 1){ UITouch *touch = [touches anyObject]; CGPoint startPos = [touch locationInView:[touch view]]; startPosition = startPos; playerStartPos = playerPos; } } -(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ if([touches count] == 1){ UITouch *touch = [touches anyObject]; CGPoint touchPos = [touch locationInView:[touch view]]; CGPoint newPlayerPos; newPlayerPos.x = playerStartPos.x + (touchPos.x - startPosition.x); newPlayerPos.y = playerStartPos.y + (touchPos.y - startPosition.y); // just to change to GL coordinates instead of the ones used by Cocos2D // still doesn''t work even if I remove this... CGPoint convertedPoint = [[CCDirector sharedDirector] convertToGL:newPlayerPos]; [player setPosition:convertedPoint]; }

Tu código parece que se "retroalimenta" a sí mismo al agregar continuamente la diferencia al playerPos.y

Tengo un problema que parece que no puedo resolver. Me gustaría mover un elemento en la pantalla en función de los movimientos de los dedos, pero en lugar de hacer que el elemento se mueva hacia la posición táctil, me gustaría que el elemento se mueva de la misma manera que el dedo se mueve en la pantalla.

Ejemplo: el usuario coloca su dedo en la pantalla (cualquier posición) y luego arrastra el dedo en la pantalla 200 píxeles hacia la izquierda, el elemento también debe moverse de 200 píxeles hacia la izquierda.

Mi enfoque era almacenar la posición del jugador al inicio y luego calcular la diferencia entre la posición de inicio y la posición actual del dedo para agregar a la posición inicial del propio sprite.

Aquí está mi código

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ if([touches count] == 1){ UITouch *touch = [touches anyObject]; CGPoint startPos = [touch locationInView:[touch view]]; startPosition = startPos; }

}

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ if([touches count] == 1){ UITouch *touch = [touches anyObject]; CGPoint touchPos = [touch locationInView:[touch view]]; CGPoint playerPos = player.position; float yDifference = startPosition.y - touchPos.y; playerPos.y = playerPos.y - yDifference; // just to change to GL coordinates instead of the ones used by Cocos2D // still doesn''t work even if I remove this... CGPoint convertedPoint = [[CCDirector sharedDirector] convertToGL:playerPos]; [player setPosition:convertedPoint]; }

}

Espero que el problema que tengo sea claro, pero si no lo es, no dudes en hacer preguntas o explicaciones adicionales. Me he quedado atrapado en esto por bastante tiempo: ''(


Así que simplemente no use la diferencia, use la posición táctil actual:

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ if([touches count] == 1){ UITouch *touch = [touches anyObject]; CGPoint playerPos = [touch locationInView:[touch view]]; // just to change to GL coordinates instead of the ones used by Cocos2D // still doesn''t work even if I remove this... CGPoint convertedPoint = [[CCDirector sharedDirector] convertToGL:playerPos]; [player setPosition:convertedPoint]; }