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?

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);
}

1
Sie werden mir verzeihen, wenn ich Google 'Tweens' zögere ...
Tin Wizard
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.