1

たとえば、2 つのキーを使用する必要があり、各キー (たとえば、LEFT キーと RIGHT キー) の押された時間が累積されるので、そのうちの 1 つをクリックするたびに、押された時間が累積されます。同じキーをもう一度押すと時間が加算され、最後に各キーの合計時間が表示されます。

これはどのように行うことができますか?

4

1 に答える 1

2

プラットフォームによってかなり異なります。しかし、イベント ドリブン プラットフォームでは、キーダウンとキーアップをイベントとして扱う場合 (.net、Java、Windows を含むほとんどの場合)、簡単です。

キーダウン イベントをリッスンし、それが発生した時間を記録します。同じキーのキーアップ イベントを取得した場合は、記録した時間から発生した時間を差し引くだけです。2 つの違いは、そのキーを押している時間の長さです。

問題は、プラットフォームがキーの繰り返しを処理する方法によっては、キーアップを取得する前に、同じキーに対して複数のキーダウンを取得する場合があることです。各キーの最初のキーのみを追跡します (もちろん、最後のキーアップまたはアプリの起動以降)。一度に複数のキーを押すことができるので、これを正しく行いたい場合は、複数のキーのキーダウン時間を覚えておくことができます。

合計時間を追跡したい場合は、キーアップで見つけた時間差を取り、そのキーの現在の合計に追加します。

JS で:

(function() {
    var output = document.getElementById('output'),
        totalTime = {},
        pressed = {};

    window.onkeydown = function(e) {
        if (e.which in pressed) return;
        pressed[e.which] = e.timeStamp;
    };

    window.onkeyup = function(e) {
        if (!(e.which in pressed)) return;
        var duration = ( e.timeStamp - pressed[e.which] ) / 1000;
        if (!(e.which in totalTime)) totalTime[e.which] = 0;
        totalTime[e.which] += duration;
        output.innerHTML +=
            '<p>Key ' + e.which + ' was pressed for ' +
            duration + ' seconds this time' +
            '(' + totalTime[e.which] + ' total)</p>';
        delete pressed[e.which];
    };
})();
于 2012-04-27T17:17:26.727 に答える