2016-07-13 12 views
0

Ok zu berechnen, so glaube ich am besten das Problem durch eine Code beschreiben könnte, so geht hierFunktion Funktion fps

var clicks = 0; 

//function to calculate 
function clicking(){ 
    clicks += 1; 
} 

//function to calculate fps where fn is the name of the function 
function FPS(fn){ 
    //do stuff 
} 

Okay, so zu klären, ich möchte nicht clicking eine Variable auf die tatsächliche Funktion hinzufügen würde ich gerne in der Lage sein, so etwas wie FPS(clicking) zu rufen und haben die Funktion einen Wert beispielsweise zurückgeben

var fps = FPS(clicking); 

, dann könnte ich die zurückgegebene Nummer angezeigt wird als solche element.innerHTML = fps

EDIT: ich mit dem aktuellen Code kennen scheint es albern, aber das ist nur Beispiel Codierung nicht, was ich eigentlich mit

+1

Was „FPS“ ist, wenn auf eine Funktion angewendet? – zerkms

+0

fps ist im Grunde, wie schnell die Funktion läuft –

+0

Sie wollen also eine Stoppuhr? z.B. rufe 'startClock(); fn(); stopClock(); 'und das Delta berechnen? – Zach

Antwort

2

Dies ist nicht sehr aktuell, da Date.now() auch Zeit verwendet.

function FPS(fn) { 
 
    var startTime = Date.now(); 
 
    fn(); 
 
    var endTime = Date.now(); 
 

 
    return endTime - startTime; 
 
} 
 

 
function longClick() { 
 
    var abc = 0; 
 
    for (var i = 0; i < 100000000; i++) { 
 
    abc++; 
 
    } 
 
} 
 

 
var fps = FPS(longClick); 
 
console.log((fps/1000) + ' seconds');


FPS Regel bezieht sich auf Frames pro Sekunde, die die Frequenz des erfrischenden Bildschirmbild ist.

Wählen Sie einen umfassenderen Namen, mit Stichworten wie Verstrichen, für Teamkollegen.

+0

immer 0 –

+0

Rückkehr Es ist, weil Ihr 'Klicken' ist so einfach, dass es innerhalb abgeschlossen ist eine Millisekunde. Solche einfachen Funktionen werden in 1/1000 Millisekunden gezählt. – Tommy

+0

ran Funktion dett (i) {while (i> 0) {i--}} wobei i = 10 und immer noch 0 –

0

das Original zu beantworten Frage:

okay, so zu klären, ich möchte nicht eine Variable auf die tatsächliche Funktion Klick hinzufügen ich so etwas wie FPS in der Lage sein möchten, rufen Sie (Klick) und haben die Funktion einen Wert beispielsweise zurückgeben

Zuerst müssen Sie einen Wert aus Ihrer clicking-Funktion oder einer Funktion, die Sie an die FPS-Methode übergeben möchten, zurückgeben.

var clicks = 0; 

//function to calculate 
function clicking(){ 
    clicks += 1; 
    return clicks; 
} 

Dann in Ihrer FPS Funktion, müssen Sie auch diesen Wert zurückzukehren.

//function to calculate fps where fn is the name of the function 
function FPS(fn){ 
    //do stuff 
    return fn(); 
} 
0

Wenn Sie wissen wollen, „wie schnell die Funktionen läuft“:

/** 
 
* Return the execution time of a function 
 
* @param {Function} fn The function to execute 
 
*/ 
 
function FPS(fn) { 
 
    var start = new Date().getTime(); 
 
    fn(); 
 
    var end = new Date().getTime(); 
 
    return end - start; 
 
}

0

Hier einige Pseudo-Code zu bekommen, was ich denke, Sie suchen - vorausgesetzt, Sie haben Spielschleife und du nennst FPS in deiner Spielschleife. Wie gesagt - mehr Details zu den Besonderheiten (wie Komponenten) Ihres Spiels wären hilfreich.

var clicks = 0; 
var fps = 0; 
var elapsedTime; 

//function to calculate 
function clicking(){ 
    clicks += 1; 
} 

//function to calculate fps where fn is the name of the function 
function FPS(fn){ 
    // Get start time 
    //call fn 
    // Get stop time 
    // var delta = stop time - start time 
    // elapsedTime += delta; 
    // fps++; 
    // If elapsedTime > 1 second 
    // then while elapsedTime > 1 second... elapsedTime -= 1 second and fps = 0; 
    // We use the while loop here in the event that it took more than 1 second in the call 
    // But you could just reset elapsedTime back to 0 
} 

Diese FPS (fn) würde überall im Spiel anstelle der ursprünglichen Funktion aufgerufen werden, um zu sehen, wie oft die Funktion einer Sekunde aufgerufen wird.

0

Sie können FPS eine DOMHighResTimeStamp zurückgeben (funktioniert in IE 10+, Firefox 15+, Chrome 20+, Safari 8+), die Zeit in Millisekunden zurückgibt. Wenn Sie es wollen, in älteren Browser arbeiten können Sie die Präzision Timing mit einem Datum (new Date()) Objekt ersetzen, sondern das Objekt Datum werden Sie nur die Zeit in Sekunden nab (nicht Millisekunden):

var clicks = 0; 

//function to calculate 
function clicking(){ 
    clicks += 1; 
} 

//function to calculate fps where fn is the name of the function 
function FPS(fn){ 
    var start = performance.now(); 
    fn(); 
    return performance.now() - start; 
} 

console.log("Function took " + FPS(clicking) + " milliseconds!");