2012-01-28 52 views
1

我想測量reaction time of a user。在這個例子中,我使用動作腳本,但這個概念真的很重要,所以如果你想顯示任何代碼,可以隨意用你選擇的語言來回答。毫秒精度的ActionScript新日期()或getTimer()

用戶坐在屏幕前,會出現紅點。當他們看到紅點時,他們撞上了空格鍵。

我的邏輯如下:使紅點可見,創建新日期,等待空格鍵,創建新日期,使用TimeSpan對象查找以毫秒爲單位的差異。

//listen for the keystroke 
this.systemManager.stage.addEventListener(KeyboardEvent.KEY_DOWN, catchSpace, true, 1); 
... 
if (e.keyCode == Keyboard.SPACE) { 
    e.preventDefault(); 
    this.dispatchEvent(new PvtEvent(PvtEvent.BTN_CLICK)); 
} 

//show the red dot, making note of the time 
redDot.visible = true; 
this.startCount=new Date(); 

//user clicks the space bar 
this.endCount=new Date(); 
var timeSpan:Number=TimeSpan.fromDates(this.startCount, this.endCount).totalMilliseconds; 

我覺得這樣可以工作,但我得到一些令人不安的值。下面是一個典型的結果集:

[254, 294, 296, 305, 306, 307, 308, 309, 310, 308, 312, 308, 338, 346, 364, 370, 380, 387, 395, 402, 427] 

請注意,其中一些值是接近的,而308則記錄了多次。所以,我的問題如下:

  1. 是我的代碼,或我使用的邏輯,以某種方式存在缺陷?
  2. 用戶能夠產生重複次數的概率是多少?
  3. 如果概率很低,那麼我在這裏錯過了什麼?

我還應該注意到我(意外地)收到了12ms的響應時間。我正在測試應用程序,恰好在紅點出現時撞上了空格鍵。所以,我懷疑我的代碼無法判斷準確的時間,至少精確到±12ms :)。

回答

0
  1. 不,邏輯似乎很好。這是測量ms的時間的一種非常簡單的方法。
  2. 原來,人類和計算機很少能做到精確到毫秒的任何事情。
  3. 我絆倒的是Flash!

經過幾個月的通斷測試,我們發現了這個問題;語言。來自柔性定時器上的ASDOC:

不推薦使用低於20毫秒的延遲。定時器頻率 限制爲每秒60幀,這意味着延遲時間低於16.60毫秒會導致運行時問題。

Flash以60幀/秒的幀率運行。我想這意味着如果你嘗試測量時間,並希望精確到小於16毫秒,那麼你運氣不好。然而,這確實解釋了爲什麼我會看到重複值,因爲這個「60 FPS窗口」中的任何內容都是在同一時間測量的。

0

我想假設反應時間有些正態分佈,所以可能會出現一些結果更可能發生多次的情況。你的反應時間從254到427,即174個可能的不同結果。所以問題在x測試中,在x測試中有多少可能是相同的?因爲它可能正常分佈,這增加。

如果您在計算機上運行它,則記住其他應用程序/線程與CPU交互。此外,在操作系統的一些延遲,如果你通過USB或PS/2連接(USB設備/集線器輪詢,而PS/2是直接到IRQ)