2012-07-03 1 views
0

Lorsque l'utilisateur relâche son doigt, je souhaite que l'image-objet revienne à 0 degré. À l'heure actuelle, il se fait comme ceci:Retourner à 0 degré Logarithmiquement

if (touching == NO && rotationValue != 0) 
{ 
    if (rotationValue < 180 && rotationValue < 0) 
    { 
     rotationValue += 1.5; 
    } 
    else 
    { 
     rotationValue -= 1.5; 
    } 

    if (rotationValue < 1 && rotationValue > -1) 
     rotationValue = 0; 
} 

Quelqu'un peut-il me aider ainsi quand le sprite tourne en arrière logarithmiquement, il commence à tourner plus vite ralentit alors qu'il atteint 0.

+0

Qu'avez-vous essayé jusqu'à présent? Comme vous le savez sûrement, vous devrez ajouter des valeurs différentes à 'rotationValue' à chaque itération; quelle partie de cela vous cause un problème? –

Répondre

1

Fondamentalement, vous voulez soustraire une fraction de la différence à gauche chaque tick. 0.125 voici un paramètre arbitraire, vous pouvez le changer pour changer la vitesse globale.

if (fabs(rotationValue) < 0.00000000000000000001){ 
    rotationValue = 0.0; 
} else { 
    rotationValue -= .125 * fabs(rotationValue); 
} 
+0

cela vous donnera la décroissance exponentielle, qui ne se rapproche que de l'objectif asymptotiquement. C'est uniquement à cause d'une précision à virgule flottante limitée que vous atteindrez finalement 0. Je combinerais le terme proportionnel avec une très petite valeur constante pour m'assurer d'y arriver dans un délai raisonnable. – japreiss

+0

bon point, je vais ajouter cela. – Antimony

+0

Je voulais dire quelque chose comme ceci: 'rotationValue - = (.125 * fabs (rotationValue) + 0.02).» Voir [la différence sur Wolfram Alpha:] (http://www.wolframalpha.com/input/?i=exp % 28-x% 29% 2C + exp% 28-x% 29 + - + 0.02x% 2C + x +% 3D + 0 + à + 5% 2C + y +% 3D + 0 + à + 1) – japreiss

Questions connexes