Rueda giratoria con velocidad de adición táctil

Tengo un control de rueda en un juego que está configurado así:

- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:[touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    if (CGRectContainsPoint(wheel.boundingBox, location))
    {
        CGPoint firstLocation = [touch previousLocationInView:[touch view]];
        CGPoint location = [touch locationInView:[touch view]];

        CGPoint touchingPoint = [[CCDirector sharedDirector] convertToGL:location];
        CGPoint firstTouchingPoint = [[CCDirector sharedDirector] convertToGL:firstLocation];

        CGPoint firstVector = ccpSub(firstTouchingPoint, wheel.position);
        CGFloat firstRotateAngle = -ccpToAngle(firstVector);
        CGFloat previousTouch = CC_RADIANS_TO_DEGREES(firstRotateAngle);

        CGPoint vector = ccpSub(touchingPoint, wheel.position);
        CGFloat rotateAngle = -ccpToAngle(vector);
        CGFloat currentTouch = CC_RADIANS_TO_DEGREES(rotateAngle);

        wheelRotation += (currentTouch - previousTouch) * 0.6; //limit speed 0.6
    }
}

Actualizo la rotación de una rueda en el método de actualización haciendo:

wheel.rotation = wheelRotation;

Ahora, una vez que el usuario suelta la rueda, quiero que gire de nuevo a donde estaba antes, pero no sin tener en cuenta la velocidad del deslizamiento que ha hecho el usuario. Esta es la parte que realmente no puedo entender. Entonces, si el deslizamiento genera mucha velocidad, la rueda seguirá moviéndose ligeramente en esa dirección hasta que se active la fuerza general que tira de la rueda hacia la posición inicial.

¿Alguna idea/fragmentos de código?

preguntado el 30 de junio de 12 a las 22:06

¿Estaría bien si esto se hiciera completamente en animación central, y no cocos? -

Lo necesito para que funcione dentro del marco de cocos2d realmente, simplemente no puedo entender las matemáticas. -

1 Respuestas

Limite la rotación de la rueda += toque actual - Toque anterior;
quiero decir

if (currentTouch - previousTouch > wantedLimit) {
wheelrotation += wantedLimit;
}
else {
wheelrotation += currentTouch - previousTouch;
}

Respondido el 30 de junio de 12 a las 23:06

Hola gracias logré limitar la rotación de la rueda con un valor fijo de 0.5. Lo multipliqué así: ruedaRotación += (toque actual - Toque anterior) * 0.5; Sin embargo, todavía tengo problemas con la segunda parte. - dev6546

Intente insertar el código que gira de nuevo al lugar original en el método touchesEnded - Ricky

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.