2012-01-28 2 views
1

Я хотел бы измерить reaction time of a user. В этом примере я использую actioncript, но концепция действительно важна, поэтому не стесняйтесь отвечать на выбранном вами языке, если вы хотите показать какой-либо код.Миллисекундная точность ActionScript new Date() или 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. Если вероятность низкая, то что мне здесь не хватает?

Следует также отметить, что я получил (совершенно случайно) 12 мс время отклика. Я тестировал приложение и случайно попал в пробел, когда появилась красная точка. Итак, я сомневаюсь, что мой код не может судить точное время, по крайней мере, с точностью ± 12 мс :).

ответ

0
  1. Нет, логика кажется нормально. Это совершенно простой способ измерения времени для ms.
  2. Оказывается, люди и компьютеры редко могут делать что-либо до миллисекундной точности.
  3. Вещь, с которой я работаю, - это Flash!

После нескольких месяцев тестирования и тестирования мы выяснили проблему; язык. От ASDOC на гибком таймере:

Задержка менее 20 миллисекунд не рекомендуется. Частота таймера ограничена 60 кадрами в секунду, что означает задержку ниже 16,6 миллисекунд, что приводит к проблемам времени выполнения.

Вспышка работает со скоростью 60 кадров в секунду. Я предполагаю, что это означает, что если вы попытаетесь измерить время и хотите быть точным до менее 16 мс, вам не повезло.Однако это объясняет, почему я буду видеть повторяющиеся значения, поскольку что-либо в этом «окне 60 FPS» просто измерялось как одно и то же время.

0

Я бы предположил, что время реакции имеет несколько нормальное распределение, поэтому может быть, что некоторые результаты чаще происходят несколько раз. Время реакции составляет от 254 до 427, что составляет 174 возможных разных результата. поэтому вопрос находится в тестах x, насколько вероятно, что в x тестах некоторые из них одинаковы? так как это, вероятно, нормальное распределение, это увеличивается.

Если вы запустите его на своем компьютере, запомните, что другие приложения/потоки взаимодействуют с ЦП. Кроме того, некоторая задержка в ОС, а если подключить через USB или PS/2 (USB-устройства/ступица опрашивается, в то время как PS/2 непосредственно к IRQ)