Schöne Funktion für "Rolling Score Up"?

7

Ich erhöhe die Punktzahl des Spielers und verwende eine Formel pro Frame wie:

int score, displayedScore ;// score is ACTUAL score player has,
// displayedScore is what is shown this frame to the player
// (the creeping/"rolling" number)

float disparity = score - displayedScore ;
int d = disparity * .1f ; // add 1/10 of the difference,
if( !d )  d = signum( disparity ) ; // last 10 go by 1's
score += d ;

Wo

inline int signum( float val ){
  if( val > 0 )  return 1 ;
  else if( val < 0 )  return -1 ;
  else return 0 ;
}

Es funktioniert also so, dass es schnell große Änderungen vornimmt und sich dann in den letzten nacheinander einschleicht.

Aber ich suche nach besseren (oder möglicherweise bekannten?) Score-Creeping-Funktionen. Jemand?

Bobobobo
quelle

Antworten:

6

Tweens eignen sich hervorragend dafür, und jede Tween-Bibliothek hat das, was Sie brauchen.

Die folgende Funktion habe ich bereits in einigen Spielen verwendet. Es scrollt zuerst sehr schnell und verlangsamt sich dann gegen Ende etwas, was an Spielautomaten erinnert.

void addToScore( float val ) {
    score += val;

    //  Stop the current tween, in case one is still running.
    TweenLib.stop();

    //  Tween displayedScore to the value of score over the period
    //  of one second with a cubic easing function.
    TweenLib.tween( displayedScore, score, 1.0, Cubic.EaseOut);
}
AndrewEkeren
quelle
1
Sie werden mir verzeihen, wenn ich Google 'Tweens' zögere ...
Tin Wizard