我想测量reaction time of a user。在这个例子中,我正在使用actionscript,但这个概念确实非常重要,所以如果你想显示任何代码,请随意用你选择的语言回答。
用户坐在屏幕前面,会出现一个红点。当他们看到红点时,他们会撞到空格键。
我的逻辑如下:使红点可见,创建一个新日期,等待空格键,创建一个新日期,使用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会被多次记录。所以,我的问题如下:
我还应该注意到,我(非常偶然地)收到了12毫秒的响应时间。我正在测试应用程序,碰巧碰到空格键就像红点出现一样。所以,我怀疑我的代码无法判断准确的时间,至少精确到±12ms :)。
答案 0 :(得分:0)
我认为反应时间有一定程度的正态分布,因此可能会出现一些结果更有可能发生几次的情况。您的反应时间从254到427,这可能是174种不同的结果。问题是在x测试中,在x测试中,有些可能性相同吗?因为它可能是正常分布的,所以增加了。
如果您在计算机上运行它,请记住其他应用程序/线程与CPU交互。此外,操作系统有一些延迟,如果你通过USB或PS / 2连接(USB设备/集线器被轮询,而PS / 2直接连接到IRQ)
答案 1 :(得分:0)
经过几个月的开关测试,我们发现了问题;语言。从Flex定时器上的ASDOC:
建议不要超过20毫秒的延迟。定时器频率 限制为每秒60帧,意味着延迟低于16.6 毫秒会导致运行时问题。
Flash以60 FPS的帧速率运行。我想这意味着如果你试图测量时间,并希望精确到16毫秒,那你就不走运了。然而,这确实解释了为什么我会看到重复值,因为这个“60 FPS窗口”中的任何内容都只是同时被测量。